简体   繁体   English

如何比较两个字符串数组并找到公共字符串数组的索引号并将其应用于第三个字符串数组?

[英]How to compare two string array and find the index number of the common string array and apply it to the third string array?

I have three string arrays 我有三个字符串数组

string[] stringArray= {"AAA", "BBB", "CCC","DDD", "EEE","FFF","GGG","HHH" };
string[] stringArray1 = { "A", "B", "C","D", "E","F","G","H" };
string[] stringArray2 = { "BBB", "DDD","FFF","HHH" };

How could I compare stringArray2 with stringArray and find the index number stringArray that matches. 我怎样才能将stringArray2stringArray进行比较,并找到匹配的索引号stringArray After finding the index ,I need to apply it to stringArray1 and display the results. 找到索引后,我需要将它应用于stringArray1并显示结果。

I have tried the following code ,but failed to get the match string 我尝试了以下代码,但未能获得匹配字符串

int j=0;
string line = null;
List<string> finalstring = new List<string>();

for (int i = 0; i < stringArray.Count; i++)
{ 
   while(stringArray[i] == stringArray2[j])
   {
      line = stringArray2[i];
      finalstring.Add(line);
      j++;
   }
}

I think you have to try like this: 我想你必须这样试试:

var result = stringArray1.Where(c => // iterating stringArray1
             stringArray2.Where(x => stringArray.Contains(x)) // filtering stringArray2 elements
                         .Any(y=>y.Contains(c))).ToList(); // collect the final result

A Working example for your reference 一个工作示例供您参考

int j=0;
string line = null;
List<string> finalstring = new List<string>();
for (int i = 0; i < stringArray.Length; i++)
//for (int i = 0; i < stringArray.Count; i++)   // <-- Count is not proper way to get total elements in an array
{
   j = 0;  // <-- you failed to reinitialize 'j' 
   //while(stringArray[i] == stringArray2[j])  // <-- while is not proper way to compare
   if(stringArray[i] == stringArray2[j])
   {
      //line = stringArray2[i];

      //if only first charracter is needed
      finalstring.Add(new string(stringArray2[i][0], 1));

      //if complete string is needed
      //finalstring.Add(stringArray2[i]);

      j++;
   }
}

Above is not an optimized way to do the comparisons. 以上不是进行比较的优化方法。 You can try using HashSet class 您可以尝试使用HashSet类

    string[] stringArray= {"AAA", "BBB", "CCC","DDD", "EEE","FFF","GGG","HHH" };
    string[] stringArray1 = { "A", "B", "C","D", "E","F","G","H" };
    string[] stringArray2 = { "BBB", "DDD","FFF","HHH" };

    //convert string array to hashset
    var hashSet = new HashSet<string>(stringArray);

    int j=0;
    string line = null;
    List<string> finalstring = new List<string>();

    for (int i = 0; i < stringArray2.Length; i++)
    {
        if(hashSet.Contains(stringArray2[i]))
        {
            //if only first charracter is needed
            finalstring.Add(new string(stringArray2[i][0], 1));
        }
    } 
List<string> finalList = new List<string>();
stringArray.Select((value,index) => new { value, index })
.Where(num => stringArray2.Contains(num.value)).ToList()
.ForEach(num => finalList.Add(stringArray1[num.index]));

You are trying to compare the elements on same index but you have to search the element of stringArray2 in stringArray . 您正在尝试比较相同索引上的元素,但您必须在stringArray搜索stringArray2的元素。 You can use Array.IndexOf to find in Array the required element. 您可以使用Array.IndexOf在Array中查找所需的元素。

string[] stringArray= {"AAA", "BBB", "CCC","DDD", "EEE","FFF","GGG","HHH" };
string[] stringArray1 = { "A", "B", "C","D", "E","F","G","H" };
string[] stringArray2 = { "BBB", "DDD","FFF","HHH" };
    int j=0;
string line = null;
List<string> finalstring = new List<string>();

for (int i = 0; i < stringArray2.Count(); i++)
{ 
   if(Array.IndexOf(stringArray, stringArray2[i]) != -1)
   {
      int idx = Array.IndexOf(stringArray1, stringArray2[i][0].ToString());
      if(idx!=-1)
        finalstring.Add(stringArray1[idx]);
    }  
}

Edit using Linq 使用Linq 编辑

var result2 = stringArray1.Where(c=>
              stringArray2.Intersect(stringArray)
              .Any(i=>i.Contains(c)));

you could do it with selecting the index via Linq ( where >= 0 filters out all non matches): 你可以通过Linq选择索引( where >= 0过滤掉所有非匹配):

string[] stringArray = { "AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH" };
string[] stringArray1 = { "A", "B", "C", "D", "E", "F", "G", "H" };
string[] stringArray2 = { "BBB", "DDD", "FFF", "HHH" };

var matches = stringArray2
    .Select(s => Array.FindIndex(stringArray, s2 => s2 == s))
    .Where(i => i >= 0).Select(i => stringArray1[i])
    .ToList();

Here a dotnetfiddle 这是一个dotnetfiddle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM