// ■Jag配列による集合演算の例 // @ listBox1, textBox1,textBox2, textBox3を配置 // A button1, botton2, … , botton7を配置. それぞれClickイベントを指定。 // Textプロパティにそれぞれ"Jag配列の生成", "SetMember", "AddMember" // "DelMember","Union","Intersection","Difference" // B textbox1, 2, 3 の前にlabel1,label2,label3を配置して。 // それぞれのTextプロパティを"Element","ID","ID2"とする。 // 実行では、 // @ botton1をクリックしてJag配列の初期値を設定 // A textBox1に要素(整数), textbox2に配列の添字を指定してbutton2を // クリックすると要素が入っているかどうかが表示される。 // B textBox1に要素(整数), textbox2に配列の添字を指定してbutton3を // クリックすると要素が追加され,botton4をクリックすると削除される。 // C textBox2に配列添字(ID),textBox3に配列添字(ID2)を指定して, // button5,button6,button7をクリックすると,それぞれの演算が実行され // IDで示される配列に結果が移される。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace JagArraySet { public partial class Form1 : Form { public int[][] Set = new int[3][]; public Form1() { InitializeComponent(); } public void 表示() { string S; listBox1.Items.Clear(); foreach (int[] A in Set) { if (A.Length == 0) S = "[]"; else { S = ""; foreach (int X in A) S += X.ToString() + ", "; S = "[" + S.Substring(0, S.Length - 2) + "]"; } listBox1.Items.Add(S); } } private void button1_Click(object sender, System.EventArgs e) { // Jag配列(Jagとは鋸歯上のギザギザという意味) Set[0] = new int[3] { 1, 2, 3 }; Set[1] = new int[0] { }; Set[2] = new int[4] { 4, 5, 6, 7 }; 表示(); } private bool SetMember(int X, int[] S) { for (int i = 0; i < S.Length; i++) if (X == S[i]) return true; return false; } private int[] AddMember(int X, int[] S) { if (SetMember(X, S)) return S; int[] S2 = new int[S.Length + 1]; for (int i = 0; i < S.Length; i++) S2[i] = S[i]; S2[S.Length] = X; return S2; } private void button3_Click(object sender, System.EventArgs e) { int EL = int.Parse(textBox1.Text); int ID = int.Parse(textBox2.Text); Set[ID] = AddMember(EL, Set[ID]); 表示(); } private int[] DelMember(int X, int[] S) { if (!SetMember(X, S)) return S; int[] S2 = new int[S.Length - 1]; int ii = 0; for (int i = 0; i < S.Length; i++) if (S[i] != X) S2[ii++] = S[i]; return S2; } private void button4_Click(object sender, System.EventArgs e) { int EL = int.Parse(textBox1.Text); int ID = int.Parse(textBox2.Text); Set[ID] = DelMember(EL, Set[ID]); 表示(); } private int[] SetUnion(int[] S1, int[] S2) { int[] S = S2; foreach (int EL in S1) S = AddMember(EL, S); return S; } private void button5_Click(object sender, System.EventArgs e) { int ID1 = int.Parse(textBox2.Text); int ID2 = int.Parse(textBox3.Text); Set[ID1] = SetUnion(Set[ID1], Set[ID2]); 表示(); } private int[] SetIntersection(int[] S1, int[] S2) { int[] S = new int[] { }; foreach (int EL in S1) if (SetMember(EL, S2)) S = AddMember(EL, S); return S; } private void button6_Click(object sender, System.EventArgs e) { int ID1 = int.Parse(textBox2.Text); int ID2 = int.Parse(textBox3.Text); Set[ID1] = SetIntersection(Set[ID1], Set[ID2]); 表示(); } private int[] SetDifference(int[] S1, int[] S2) { int[] S = new int[] { }; foreach (int EL in S1) if (!SetMember(EL, S2)) S = AddMember(EL, S); return S; } private void button7_Click(object sender, System.EventArgs e) { int ID1 = int.Parse(textBox2.Text); int ID2 = int.Parse(textBox3.Text); Set[ID1] = SetDifference(Set[ID1], Set[ID2]); 表示(); } private void button2_Click(object sender, System.EventArgs e) { int EL = int.Parse(textBox1.Text); int ID = int.Parse(textBox2.Text); if (ID >= 0 && ID <= 2) MessageBox.Show(SetMember(EL, Set[ID]).ToString()); } } }