标题:关于数组的复杂比较,求解
只看楼主
urick
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-12-6
结帖率:75%
已结贴  问题点数:20 回复次数:13 
关于数组的复杂比较,求解
strs1为变量数组,其中每个变量都是通过不同的文本框输入;
第一优先级的常量数组:strs2和strs3;
第二优先级的常量数组:strs4;

想实现以下功能:
1.只要strs1其中的元素包含strs2或strs3,该部分元素所在文本框的背景就为红色;
2.strs1的剩余元素若还包含strs4,则该部分元素所在文本框的背景就为黄色


目前的错误结果:




期待的结果:



 private void TimerProcess1(object o)
 {
     string strs = string.Empty;
     string[] strs1 = { "a", "b", "c", "d", "e", "f", "g" };//定义数组
     string[] strs2 = { "飞", "行", "器" };//常量数组
     string[] strs3 = { "服", "务", "器" };
     string[] strs4 = { "飞", "机" };

     Dictionary<string, string> map = new Dictionary<string, string>();
     for (int k = 0; k < strs1.Length; k++)
           {
                map.Add(strs1[k], "");
            }

            for (int m = 0; m < strs2.Length; m++)
            {
               if (map.ContainsKey(strs2[m]))
                {
                请高手指点!
                 }

[ 本帖最后由 urick 于 2014-11-7 00:27 编辑 ]
搜索更多相关主题的帖子: 文本框 黄色 元素 
2014-11-06 00:10
afdoa83
Rank: 4
等 级:业余侠客
威 望:7
帖 子:43
专家分:262
注 册:2012-7-31
得分:0 
swicth (m)
{
  case 0:
    TextBox1.BackgroundColor = Color.FromARGB(0,255,0,0);
    brak;
  case 1:
    TextBox2.BackgroundColor = Color.FromARGB(0,255,0,0);
    break;
  //等等;
}
是这样的意思吗?
2014-11-06 22:11
urick
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-12-6
得分:0 
private void button1_Click(object sender, EventArgs e)//
        {
            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)
//只有在包含strs2或strs3的所有元素,该条件才成立。如何修改??
                {
                    key.Key.BackColor = Color.Red;
                }
                if (strs4.Where(s => s == key.Value).Count() > 0)
//如何将比较后剩余的元素组成一个数组,再与strs4进行比较,具体代码该怎么实现,求解!
                {
                    key.Key.BackColor = Color.Yellow;
                }
            }

[ 本帖最后由 urick 于 2014-11-7 00:18 编辑 ]
2014-11-07 00:15
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:5 
if (strs2.Where(s => s == key.Value).Count() > 0 || strs3.Where(s => s == key.Value).Count() > 0)
                {
                    key.Key.BackColor = Color.Red;
                    key.Key.Tag = 1;
                }
                if (strs4.Where(s => s == key.Value).Count() > 0 && key.Key.Tag== null)
                {
                    key.Key.BackColor = Color.Yellow;
                }

Maybe
2014-11-07 08:19
afdoa83
Rank: 4
等 级:业余侠客
威 望:7
帖 子:43
专家分:262
注 册:2012-7-31
得分:0 
回复 4 楼 邓士林
这样子<服务>还是会变红
可以试试 List<T>.Contains方法
楼主想在一次遍历循环就要解决3个问题,结构上比较麻烦。
2014-11-07 09:04
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
以下是引用afdoa83在2014-11-7 09:04:54的发言:

这样子<服务>还是会变红
可以试试 List<T>.Contains方法
楼主想在一次遍历循环就要解决3个问题,结构上比较麻烦。

1.只要strs1其中的元素包含strs2或strs3,该部分元素所在文本框的背景就为红色;

Maybe
2014-11-07 11:32
urick
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-12-6
得分:0 
回复 5 楼 afdoa83
麻烦发个具体代码,想学习下
2014-11-07 13:23
urick
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2012-12-6
得分:0 
为避免出现歧义,重新明确下需求,希望集思广益,给出具体代码,以供参考:
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中,则元素所在的文本框背景色变为黄色。


[ 本帖最后由 urick 于 2014-11-7 18:30 编辑 ]
2014-11-07 18:28
afdoa83
Rank: 4
等 级:业余侠客
威 望:7
帖 子:43
专家分:262
注 册:2012-7-31
得分:0 
我用控制台模拟了一下。
换成winfrom 字符串3改黄色总是出错..暂时没找到毛病

这是控制台模拟的程序
using System;
using System.Collections.Generic;


class Test
{
  public static void Main()
  {
    //数据定义
    List<string> Str = new List<string>();
    Console.WriteLine("输入5个字符串,以空格间隔");
    string abc = Console.ReadLine();
    string[] s0 = abc.Split(new char[] {' '});
    string[] s1 = {"1", "2", "3"};
    string[] s2 = {"2", "3", "1"};
    string[] s3 = {"4", "5"};
    foreach (string arr in s0)
      Str.Add(arr);  //给Str赋值

    SsPk ad1 = new SsPk();
    SsPk ad2 = new SsPk();
    SsPk ad3 = new SsPk();
    ad1.RGB(s1, Str, 1);
    Console.WriteLine();
    ad2.RGB(s2, Str, 2);
    Console.WriteLine();
    ad3.RGB(s3, Str, 3);
   
  }  
}
class SsPk
{
  private int n = 0;
  private string tmp;
  public void RGB(string[] a, List<string> b, int x)
  {
    if (x != 3)
    {
      tmp = "红";
    }
    else
    {
      tmp = "黄";
    }
    for (int i = 0, j = 0; i<b.Count; i++)
    {
      //判定首个相等字符,并且后续有足够的空间能包含剩余字符
      if (a[j] == b[i] && a.Length <= b.Count - i)
      {
        //n相当于指针,用于记录当前在Str中的位置
        //j用于向后计算,是否连续相等
        
        n++; j++;
        
        //循环判定,记录s1首字符之后的等量关系
        while (j < a.Length)
        {
          if (a[j] == b[i+j])
          {
            n++; j++;
          }
          else
          {
            j++;
          }
        }
        //根据上述条件,改写Str数组
        if (n == a.Length)
        {         
          n = i + n;
          while (i < n)
          {
            b[i] = b[i] + tmp;
            i++;
          }
         
          break;
        }
        else if (j == a.Length)
        {         
          break;
        }
      }
    }
    Console.WriteLine("第<{0}>对比,模拟改变TextBox背景色", x);
    foreach (string arr in b)
    {
      Console.Write(arr + " ");
    }
  }
}
2014-11-08 04:53
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
回复 9 楼 afdoa83
你五点多就起来了啊!

Maybe
2014-11-08 08:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-438177-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017548 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved