在c#中基于数字数组更改字符串的顺序

本文关键字:数组 字符串 顺序 数字 于数字 | 更新日期: 2023-09-27 17:55:01

感谢您对我关于将布尔值数组转换为字符串的问题的帮助。代码现在运行良好。现在我有另一个问题。也许有人愿意试试。我想我可以想出一个解决方案,但如果是这样的话,我有99%的把握,它不会像我从这里的人们那里看到的答案那么简单。

我所拥有的是字符串"ABD"从我的问题在这里。我也有一个整数数组。例如[0] = 2, [1] = 3 and [2] = 1.,我想找到一种方法将其应用于我的字符串以重新排序字符串,以便字符串更改为BDA。

有谁能想出一个简单的方法吗?

在c#中基于数字数组更改字符串的顺序

如果这些整数是字符串中基于1的索引(即2 =第二个字符),那么您可以这样做:

string s = "ABD";
int[] oneBasedIndices = new [] { 2, 3, 1 };
string result = String.Join(String.Empty, oneBasedIndices.Select(i => s[i-1]));

注意:如果你使用的是c# 4.0以下的版本,你需要在select语句的末尾加上一个.ToArray()

这正在做的是通过您的int[]和每个int元素在该位置选择字符串中的字符(好-1,因为数组中的第一个索引是0,但您的示例从1开始)。

然后,它必须执行String.Join()将该字符集合转换回字符串。


作为题外话,我建议下载LINQPad(没有连接)-然后你可以把代码粘贴在那里作为一个c#程序,并在任何点输入variable.Dump();(例如,在末尾输入result.Dump();),看看在那个点的值是什么。

首先复制字符串。副本永远不会改变;它可以作为你对过去值的参考

然后使用for循环遍历原始字符串,每次一个字符。for循环中的计数器是我们接下来要替换的原始字符串中哪个字符的位置。计数器也是数组的索引,用于查找原始字符串中的位置。然后将原始字符串中该位置的字符替换为复制字符串中的字符。

string orig = "ABD";
int[] oneBasedIndices = new [] { 2, 3, 1 };
string copy = orig;
for ( int i = 0; i < orig.Length; i++ )
{
    orig[i] = copy[ oneBasedIndices[i] - 1 ];
}

你知道了。如果索引从零开始,则删除- 1

餐巾代码再次出现

    string result = "ABD"; // from last question
    var indecies = new []{ 1,2,0 };
    string result2 = indecies.Aggregate(new StringBuilder(), 
       (sb, i)=>sb.Append(result[i]))
       .ToString();

或不同的版本(希望弥补-1)

StringBuilder sb = new StringBuilder();
for(int i = 0; i < indecies.Length; i++)
{
   sb.Append(result[i]); // make [i-1] if indecies are 1 based.
}
string result3 = sb.ToString();