为两个列表交换索引后的数据

本文关键字:索引 交换 数据 列表 两个 | 更新日期: 2023-09-27 18:04:36

我有两个字节列表,我想在给定索引后交换它们的数据。

我有这两个列表


----0—1-----2-----3----索引

#### **** - #### #### -ListA

#### #### **** #### **** -ListB

,我想说的是,如果索引是2,像这样交换数据

#### **** **** #### ****

#### #### #### ####


我不太熟悉linq,也许有一个快速的方法来完成这个。

谢谢,

为两个列表交换索引后的数据

没有Linq也可以做到。采用List.GetRange()List.RemoveRange()、&List.AddRange()您可以执行您正在寻找的交换,并且是快速的。

List<string> listA = new List<string>
{
    "####", 
    "****", 
    "####", 
    "####"
};
List<string> listB = new List<string>
{
    "####",
    "####",
    "****",
    "####",
    "****"
};
Console.WriteLine("Before: ");
Console.WriteLine("List A: {0}", String.Join(", ", listA));
Console.WriteLine("List B: {0}", String.Join(", ", listB));
Console.WriteLine();
SwapAfterIndex(listA, listB, 2);
Console.WriteLine("After: ");
Console.WriteLine("List A: {0}", String.Join(", ", listA));
Console.WriteLine("List B: {0}", String.Join(", ", listB));

SwapAfterIndex()看起来像:

public static void SwapAfterIndex(List<string> listA, List<string> listB, int index)
{
    if (index < 0)
    {
        return;
    }
    List<string> temp = null;
    if (index < listA.Count)
    {
        temp = listA.GetRange(index, listA.Count - index);
        listA.RemoveRange(index, listA.Count - index);
    }
    if (index < listB.Count)
    {
        listA.AddRange(listB.GetRange(index, listB.Count - index));
        listB.RemoveRange(index, listB.Count - index);
    }
    if (temp != null)
    {
        listB.AddRange(temp);
    }
}

结果:

Before:
List A: ####, ****, ####, ####
List B: ####, ####, ****, ####, ****
After:
List A: ####, ****, ****, ####, ****
List B: ####, ####, ####, ####

我不认为有2 List交换方法。您可以使用以下代码实现相同的功能:

public static void Swap2List(List<byte> firstList, List<byte> secondList, int index)
  {
       // TODO : Error handling not done.  
        for(int i = index; i < firstList.Length ; i++)
       {
         var temp = firstList[i];
         firstList[index] = secondList[i];
         secondList[i] = temp;
       }
    }