我有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];
}
}
}
然而,这只能找到相似的序列号。如何替换不同的?
答案 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];