我有两个返回以下字符串的方法: 第一种方法返回:
"Subj1
Subj3
Subj5
Subj7"
第二种方法返回:
"Subj1 (1)
Subj5 (6)
Subj4 (2)
Subj2 (8)"
如何合并这些以得到这样的结果:
"Subj1 (1)
Subj3
Subj5 (6)
Subj7
Subj4 (2)
Subj2 (8)"
我是否需要更改方法的签名,以便这些方法以其他形式或其他形式返回结果?
合并逻辑:如果第一个字符串中的项目存在于第二个字符串中,则将第二个字符串中的项目放入结果字符串中,如果第一个字符串中的项目不存在于第二个字符串中,则将第一个字符串中的项目放入结果字符串
答案 0 :(得分:2)
如果我理解你的逻辑,你需要两个步骤。
步骤1,在换行符上拆分字符串:
var s1 = "Subj1
Subj3
Subj5
Subj7"
var s2 = "Subj1 (1)
Subj5 (6)
Subj4 (2)
Subj2 (8)"
var s1words = split(s1, NewLine)
var s2words = split(s2, NewLine)
步骤2,在s2words中找到s1words中的每个单词,如果存在,则使用它:
var res
for each (word w in s1words) {
for each (word x in s2words) {
if (x.starts_with(w))
res += x + NewLine
else
res += w + NewLine
效率不高,但很简单。
答案 1 :(得分:1)
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication42
{
class Program
{
static void Main(string[] args)
{
string input1 =
"Subj1\n" +
"Subj3\n" +
"Subj5\n" +
"Subj7\n";
string input2 =
"Subj1 (1)\n" +
"Subj5 (6)\n" +
"Subj4 (2)\n" +
"Subj2 (8)\n";
string[] stringArray= (input1 + input2).Split(new char[] {'\n'}, StringSplitOptions.RemoveEmptyEntries);
var groups = stringArray.GroupBy(x => x.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]);
string output = string.Join("\n", groups.Select(x => x.OrderByDescending(y => y.Length).FirstOrDefault()));
}
}
}
答案 2 :(得分:1)
您可以将它们合并为列表,然后分组,并为每个组获取一个后缀:
var a1 = s1.Split(sep, StringSplitOptions.None);
var a2 = s2.Split(sep, StringSplitOptions.None);
var u = a1.Concat(a2);
var s = u.GroupBy(x => x.Split(' ')[0])
.Select(y => y.OrderByDescending(z => z.Length).FirstOrDefault())
.ToList();
String.Join("\r\n", s)