查找相同的数字并用新的数字替换其他数字

时间:2012-11-15 14:12:11

标签: c# arrays

我有2个阵列(每个都包含2个字符串),其中一个包含USB的序列号。另一个包含文本文件中的序列号。我能够成功地检索它们。所以这是我的问题:我需要将它们相互比较,找到一个不同的序列号,并替换它。像这样:

Contents (Dummy Serial numbers)
     ________
USB | A | B

TXT | B | C

如您所见,USB和TXT阵列都包含一个相同的序列号(B)。那部分很容易;然而,我需要编写代码来查看C!= A然后我需要A来替换C。

我试过了:

for (int x = 0; x < 2; x++)
{
     for (int y = 0; y < 2; y++)
     {
          //checks for same serial number
          if (m_AttachedUSB[x] == m_Existing_Serial_Numbers[y])
          {
              //found one
              IntOnlyOne++;
              //we want this one to stay beacause it has a serial number 
              //that matches one in the .txt file
              m_ChachedUSB = m_AttachedUSB[x];
          }
     }
}

然而,这只能找到相似的序列号。如何替换不同的?

3 个答案:

答案 0 :(得分:0)

如果我理解你的话:

List<int> usb = new List<int> {1,2,4,7,8};
List<int> text = new List<int> {1,2,3,4,5};

usb.Intersect(text).Union(usb);

这将返回包含{1,2,4,7,8}。

的列表

intersect方法为您提供两个列表中包含的所有项目。在这种情况下{1,2,4}。 union方法将在usb尚未可用时加入usb中的所有项目。在这种情况下{7,8}。

答案 1 :(得分:0)

以下内容在USB列表中创建一组所有序列号,然后遍历TXT列表,从USB集中删除匹配的项目或者注意TXT列表中“旧”项目的索引。 / p>

然后将“旧”项目替换为USB套装中的其余项目,现在应该只是“新”项目。

这假设两个列表的长度相同,并且USB列表不包含重复项。

HashSet<string> usbSNs = new HashSet<string>(m_AttachedUSB); // { "A", "B" }
List<int> txtOldIndices = new List<int>();                   // { }

// Remove existing items from USB set, note indices of old items in TXT list.
for (int i = 0; i < m_CachedUSB.Length; i++)
{                                         // First iteration  Second iteration
    if (!usbSNs.Remove(m_CachedUSB[i]))   // Now { "A" }      Still { "A" }
        txtOldIndices.Add(i);             // Still {}         Now { 1 }
}
// At this point you may want to check usbSNs and txtOldIndices
// have the same number of elements.

// Overwrite old items in TXT list with remaining, new items in USB set.    
foreach(var newSN in usbSNs)
{
    m_CachedUSB[txtOldIndices[0]] = newSN;    // Now [ "B", "A" ]
    txtOldIndices.RemoveAt(0);                // Now { }
}

基本上,这是一种将m_AttachedUSB复制到m_CachedUSB之上的方式,同时保留了两者共有的项目的位置,这就是我认为你想要的。

答案 2 :(得分:0)

列表中只有4个项目,您可以保持简单:

if(usbArray[0] == textArray[0])
  usbArray[1] = textArray[1];
else if(usbArray[0] == textArray[1])
  usbArray[1] = textArray[0];
else if(usbArray[1] == textArray[0])
  usbArray[0] = textArray[1];
else if(usbArray[1] == textArray[1])
  usbArray[0] = textArray[0];

基本上,改变两个不同的。

第二个解决方案:

for(int i=0; i<=1; i++)
  for(int j=0; j<=1; j++)
     if(usbArray[i] == textArray[j])
       usbArray[(i+1)%2] = textArray[(j+1)%2];