使用c#交换列表中的字符串

时间:2014-01-04 11:50:50

标签: c# winforms swap shift

我有一个包含文件名的列表,如f1,f2,f3,...,f6。我的

程序需要输出一个文件名出现在

中的列表

随机顺序,如f4,f1,f6,f2,f3,f5。 我想在列表中正确地交换或移位字符串

名为fileName的大小6已包含6个不同的文件名I

我正在列表文件名中交换文件名,如下所示,fil

也是用于记住当前字符串或文件名的字符串。

temp =-1;
foreach (Control control in tableLayoutPanel1.Controls) // run loop untill every control inside tablelayoutpanel1.Controls is check or read
{

Button btns = control as Button;                    // btn sotre the 

current button in table.contr 
if (btns != null)                                   // check btn got a button from 

the panel then
{
    temp++;
    int randomNumber = 0; 

    randomNumber = theArray[temp];   //this pic the random number from 0 index then 1 so on theArray already contains random number from 0 to 5 without any repitition and also tested
    fil = fileName[randomNumber];  //fil for holding string

    fileName[temp] = fileName[randomNumber]; // at filname[0] 

swap or shift filename[randomNumber] random are between 0 to 

5 and without repitition 
    fileName[randomNumber] = fil; // this line isnt even necessary 

but to be safe i wrot
    btns.BackgroundImage =  images[randomNumber];    // change 

btn image to current random image
    copyImages.Add(images[randomNumber]);

    btns.BackgroundImage = null;  // i purposely doing this :)


}

使用该代码我可以交换字符串,但我无法交换它们

正确,因为它只运行6次,所以它应该交换6个字符串

位于6个不同位置的列表中的

(每个名称不同)

列表fileName中的

但是没有发生某些字符串

显示两次或三次,希望有人可以指出我是什么

做错了,没有索引超出范围或异常错误

我测试了几百次,请帮助感谢和任何想法

建议或一段代码将是有用的,fil只是将字符串存储在fileName [temp] :)和temp的位置,只是在循环中从0到5 我不想改组它们我只是想根据给定的索引交换它们我在我的代码中做但不能正确theArray已经包含了索引我只想分配fileName[0]索引到theArray[temp]我可以发给你我的项目,如果你想看看我发送给我的我的个人资料中显示我的个人资料

3 个答案:

答案 0 :(得分:0)

您在临时变量中存储了错误的字符串。

fil = fileName[temp];  // index changed here
fileName[temp] = fileName[randomNumber];
fileName[randomNumber] = fil;

答案 1 :(得分:0)

这是一种在数组中混洗元素的简单方法。基本上,你从一端到中间遍历数组,用随机选择的一个元素交换每个元素。由于每个交换操作导致两个元素被随机放置,当我们到达中间时,整个数组被洗牌。

void Main()
{
    var arr = new string[] {"a","b","c"};
    Shuffle(arr);
    // arr is now shuffled
}

public static void Shuffle<T>(T[] arr)
{
    Random r = new Random();
    for(int i = arr.Length; i > arr.Length / 2; i--)
    {
        Swap(arr, r.Next(i), i -1);
    }
}

private static void Swap<T>(T[] arr, int first, int second)
{
    T temp = arr[first];
    arr[first] = arr[second];
    arr[second] = temp;
}

答案 2 :(得分:0)

所以假设你有一个长度为6的List和一个按随机顺序包含0到5的int [6]

List<String> newList = newList<String>();
foreach(int position in theArray)
{
   newList.Add(filename[pos]);
}
filename.Clear();
fileName.AddRange(newList);

将是一种方式。 或者你可以简单地使用filename = newList而不用ClearAddRange