首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个数字字符串交替合并到第九个位置。

将两个数字字符串交替合并到第九个位置。
EN

Stack Overflow用户
提问于 2022-03-18 02:27:43
回答 2查看 85关注 0票数 -3

我有两个数字字符串和逗号:

8,1,6,3,16,9,14,11,24,17,22,19和2,7,4,5,10,15,12,13,18,23,20,21

我需要将它们交替合并,每排第9位(例如,每4位)

8,1,2,7,6,3,4,5,16,9,10,15,14,11,12,13,24,17,18,23,22,19,20,21

我已经检查了所有推荐的解决方案,但对我没有任何作用。

以下是我目前的进展:

代码语言:javascript
运行
复制
string result = "";

// For every index in the strings
for (int i = 0; i < JoinedWithComma1.Length || i < JoinedWithComma2.Length; i=i+2)
{
    // First choose the ith character of the
    // first string if it exists
    if (i < JoinedWithComma1.Length)
        result += JoinedWithComma1[i];

    // Then choose the ith character of the
    // second string if it exists
    if (i < JoinedWithComma2.Length)
        result += JoinedWithComma2[i];
}

感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-18 03:22:26

不能依赖字符串的长度或选择"ith字符“,因为并非所有的”元素“(阅读:数字)都有相同的字符数。应该拆分字符串,这样就可以将元素从结果数组中提取出来:

代码语言:javascript
运行
复制
string JoinedWithComma1 = "8,1,6,3,16,9,14,11,24,17,22,19";
string JoinedWithComma2 = "2,7,4,5,10,15,12,13,18,23,20,21";

var split1 = JoinedWithComma1.Split(',');
var split2 = JoinedWithComma2.Split(',');

if (split1.Length != split2.Length)
{
    // TODO: decide what you want to happen when the two strings
    //       have a different number of "elements".
    throw new Exception("Oops!");
}

然后,您可以轻松地编写一个for循环来合并这两个列表:

代码语言:javascript
运行
复制
var merged = new List<string>();
for (int i = 0; i < split1.Length; i += 2)
{
    if (i + 1 < split1.Length)
    {
        merged.AddRange(new[] { split1[i], split1[i + 1],
                                split2[i], split2[i + 1] });
    }
    else
    {
        merged.AddRange(new[] { split1[i], split2[i] });
    }
}

string result = string.Join(",", merged);
Console.WriteLine(
    result);      // 8,1,2,7,6,3,4,5,16,9,10,15,14,11,12,13,24,17,18,23,22,19,20,21

在网上试试

票数 1
EN

Stack Overflow用户

发布于 2022-03-18 06:33:24

如果您编写一个正则表达式以获得一对数字:

代码语言:javascript
运行
复制
var r = new Regex(@"\d+,\d+");

您可以将每个字符串拆分成一个成对的序列:

代码语言:javascript
运行
复制
var s1pairs = r.Matches(s1).Cast<Match>().Select(m => m.ToString());
var s2pairs = r.Matches(s2).Cast<Match>().Select(m => m.ToString());

你可以把序列拉链

代码语言:javascript
运行
复制
var zipped = s1pairs.Zip(s2pairs,(a,b)=>a+","+b);

并将比特与逗号连接在一起。

代码语言:javascript
运行
复制
var result = string.Join(",", zipped);

它怎麽工作?

Regex匹配任意数量的数字,后面是逗号,后面是任意数量的数字。

一串串

代码语言:javascript
运行
复制
1,2,3,4,5,6

它匹配3次:

代码语言:javascript
运行
复制
1,2
3,4
5,6

Matches返回包含所有这些匹配的MatchCollection。要与LINQ Select兼容,需要将Cast MatchCollection转换为IEnumerable<Match>。这是因为MatchCollection早于IEnumerable<T>的发明,所以它的枚举器返回需要转换的objects。一旦转换成IEnumerable<Match>,每个匹配都可以由Select生成一个字符串序列,这些字符串是由逗号分隔的数字对。s1pairs实际上是数字对的集合:

代码语言:javascript
运行
复制
new []{ "1,2", "3,4", "5,6" }

对字符串2重复相同的

压缩序列。就像你从名字里想象出来的,Zip从A得到一个,从B得到一个,从A到B,把它们合并成一个拉链,就像衣服上的拉链,所以两个序列

代码语言:javascript
运行
复制
new [] { "1,2", "3,4" }

new [] { "A,B", "C,D" }

当拉链结束时

代码语言:javascript
运行
复制
new [] { "1,2,A,B", "3,4,C,D" }

剩下的就是用逗号把它重新连接起来

代码语言:javascript
运行
复制
"1,2,A,B,3,4,C,D"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71521836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档