数组间的比较,求解 数组 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 引入System.Linq 空间。1:使用 操作符Any 判断是否存在,如果存在 则改变颜色并且存到集合A。2:strs1的剩余元素 可以使用Except 来求与集合A的差集,再使用Any操作符判断是否存在strs4,存在做相应的设置。 改一下顺序循环map然后判断其他数组,是否Contains map[index]元素,在的话,就根据当前索引去设置对应框框的底色 把textbox和其text存入Dictionary会比较好些 private void button1_Click(object sender, EventArgs e) { this.textBox2.Text = "编"; this.textBox3.Text = "服"; this.textBox4.Text = "飞"; this.textBox5.Text = "服"; this.textBox6.Text = "务"; this.textBox7.Text = "器"; this.textBox8.Text = "程"; this.textBox9.Text = "机"; Dictionary<TextBox, string> map = new Dictionary<TextBox, string>(); List<string> strs1 = new List<string>(); foreach (Control c in this.Controls) { if (c is TextBox) { map.Add((c as TextBox),(c as TextBox).Text); } } string[] strs2 = { "笔", "记", "本" }; string[] strs3 = { "服", "务", "器" }; string[] strs4 = { "飞", "机" }; foreach (KeyValuePair<TextBox, string> key in map) { if (strs2.Where(s => s == key.Value).Count() > 0 || strs3.Where(s => s == key.Value).Count() > 0) { key.Key.BackColor = Color.Red; } if (strs4.Where(s => s == key.Value).Count() > 0) { key.Key.BackColor = Color.Yellow; } } } Quote: 引用 5 楼 sunny906 的回复:可能是我没说清楚,不是查找单个元素,又该如何修改呢??如:文本框中若只输入“服”、“务”,由于没有包含strs3的所有元素-"服"、“务”、"器",则不显示 如果strs2常量数组涵盖strs4,貌似上面的方法应该是行不通的。应先将比较后剩余的元素组成一个数组,再与strs4进行比较,具体代码该怎么实现,求解! private void button1_Click(object sender, EventArgs e) { this.textBox2.Text = "编"; this.textBox3.Text = "服"; this.textBox4.Text = "飞"; this.textBox5.Text = "服"; this.textBox6.Text = "务"; this.textBox7.Text = "器"; this.textBox8.Text = "程"; this.textBox9.Text = "机"; Dictionary<TextBox, string> map = new Dictionary<TextBox, string>(); List<string> strs1 = new List<string>(); foreach (Control c in this.Controls) { if (c is TextBox) { map.Add((c as TextBox), (c as TextBox).Text); } } string[] strs2 = { "笔", "记", "本" }; string[] strs3 = { "服", "务", "器", "本" }; string[] strs4 = { "服", "务", "飞", "机" }; List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList(); foreach (KeyValuePair<TextBox, string> key in map) { if (newStrs2.Contains(key.Value)) { key.Key.BackColor = Color.Red; } if (strs4.Contains(key.Value)) { key.Key.BackColor = Color.Yellow; } } } 如果你的strs2和strs3逻辑一样的话你不如先把它们合并后去重复,再进行判断,逻辑就清晰了 我自己没去试。不过感觉用Linq很简单就可以实现吧。谁用LINQ 写出来了 发出来看看吧 还是很感谢 sunny906,提出了“把textbox和其text存入Dictionary”的思路,但如果整个界面存在20个textbox,仅仅只取其中的8个textbox来进行判断,该方法是否可行?再者,给出的以下代码,如果在实际运用中,存在需要比较的20组常量数组,可能就不太适用了。 string[] strs2 = { "笔", "记", "本" }; string[] strs3 = { "服", "务", "器", "本" }; string[] strs4 = { "服", "务", "飞", "机" }; List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList(); foreach (KeyValuePair<TextBox, string> key in map)为避免出现歧义,重新明确下需求,希望集思广益,给出具体代码,以供参考:1. 将textbox1-textbox5中的字符组成一个变量数组strs1={a,b,c,d,e};2. 若常量数组strs2={a1,a2,a3}中的每个元素都存在于strs1中,a1、a2、a3元素所在的文本框背景色变为红色(strs1只包含2个或1个strs2的元素,则该判据失效);3. 若步骤2的判据生效,则去除strs1中的a1、a2、a3元素,构建一个新的数组newstrs1后,与常量数组strs3={b1,b2}进行比较;若步骤2的判据失效,则将strs1与strs3进行比较;4. 若数组strs3的所有元素都存在于数组newstrs1或strs1中,则元素所在的文本框背景色变为黄色。 如何设置坐标轴自动变化呢? 高分求助office中的outlook操作 关于存储过程 关于求已知数组最大值的问题 ftp与tcp/ip windows 界面编程问题 c#初学,调用c的dll 使用winio出现以下错误,请师哥急解!谢谢 怎样托动没有边框的Form? 菜鸟问个很简单的问题,百思不得其解 大家帮我下,要不今天要加班,10点也回不到家,画扇形的问题? wpf 里面的new RoutedEventHandler(mymethod), 方法 mymethod能否抽取出来放一个类中?
1:使用 操作符Any 判断是否存在,如果存在 则改变颜色并且存到集合A。
2:strs1的剩余元素 可以使用Except 来求与集合A的差集,再使用Any操作符判断是否存在strs4,存在做相应的设置。
循环map
然后判断其他数组,是否Contains map[index]元素,在的话,就根据当前索引去设置对应框框的底色
{
this.textBox2.Text = "编";
this.textBox3.Text = "服";
this.textBox4.Text = "飞";
this.textBox5.Text = "服";
this.textBox6.Text = "务";
this.textBox7.Text = "器";
this.textBox8.Text = "程";
this.textBox9.Text = "机"; Dictionary<TextBox, string> map = new Dictionary<TextBox, string>();
List<string> strs1 = new List<string>();
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
map.Add((c as TextBox),(c as TextBox).Text);
}
}
string[] strs2 = { "笔", "记", "本" };
string[] strs3 = { "服", "务", "器" };
string[] strs4 = { "飞", "机" };
foreach (KeyValuePair<TextBox, string> key in map)
{
if (strs2.Where(s => s == key.Value).Count() > 0 || strs3.Where(s => s == key.Value).Count() > 0)
{
key.Key.BackColor = Color.Red;
}
if (strs4.Where(s => s == key.Value).Count() > 0)
{
key.Key.BackColor = Color.Yellow;
}
}
}
应先将比较后剩余的元素组成一个数组,再与strs4进行比较,具体代码该怎么实现,求解!
private void button1_Click(object sender, EventArgs e)
{
this.textBox2.Text = "编";
this.textBox3.Text = "服";
this.textBox4.Text = "飞";
this.textBox5.Text = "服";
this.textBox6.Text = "务";
this.textBox7.Text = "器";
this.textBox8.Text = "程";
this.textBox9.Text = "机"; Dictionary<TextBox, string> map = new Dictionary<TextBox, string>();
List<string> strs1 = new List<string>();
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
map.Add((c as TextBox), (c as TextBox).Text);
}
}
string[] strs2 = { "笔", "记", "本" };
string[] strs3 = { "服", "务", "器", "本" };
string[] strs4 = { "服", "务", "飞", "机" }; List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList();
foreach (KeyValuePair<TextBox, string> key in map)
{
if (newStrs2.Contains(key.Value))
{
key.Key.BackColor = Color.Red;
}
if (strs4.Contains(key.Value))
{
key.Key.BackColor = Color.Yellow;
}
}
}
你不如先把它们合并后去重复,再进行判断,逻辑就清晰了
不过感觉用Linq很简单就可以实现吧。
谁用LINQ 写出来了 发出来看看吧
再者,给出的以下代码,如果在实际运用中,存在需要比较的20组常量数组,可能就不太适用了。
string[] strs2 = { "笔", "记", "本" };
string[] strs3 = { "服", "务", "器", "本" };
string[] strs4 = { "服", "务", "飞", "机" };
List<string> newStrs2 = strs2.Union(strs3).Except(strs4).ToList();
foreach (KeyValuePair<TextBox, string> key in map)为避免出现歧义,重新明确下需求,希望集思广益,给出具体代码,以供参考:
1. 将textbox1-textbox5中的字符组成一个变量数组strs1={a,b,c,d,e};
2. 若常量数组strs2={a1,a2,a3}中的每个元素都存在于strs1中,a1、a2、a3元素所在的文本框背景色变为红色(strs1只包含2个或1个strs2的元素,则该判据失效);
3. 若步骤2的判据生效,则去除strs1中的a1、a2、a3元素,构建一个新的数组newstrs1后,与常量数组strs3={b1,b2}进行比较;若步骤2的判据失效,则将strs1与strs3进行比较;
4. 若数组strs3的所有元素都存在于数组newstrs1或strs1中,则元素所在的文本框背景色变为黄色。