0

我有 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];
          }
     }
}

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

4

3 回答 3

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}。

于 2012-11-15T14:26:08.780 回答
0

下面在 USB 列表中创建一组所有序列号,然后循环遍历 TXT 列表,从 USB 集中删除匹配项或记录 TXT 列表中“旧”项的索引。

然后它将“旧”项目替换为 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_AttachedUSBm_CachedUSB同时保留两者共有的项目的位置,这就是我假设你想要的。

于 2012-11-15T14:26:47.047 回答
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];
于 2012-11-15T14:26:52.797 回答