【问题标题】:String to Dictionary or Array in C#C# 中的字符串到字典或数组
【发布时间】:2018-02-15 02:20:11
【问题描述】:

我有一个字符串如下:

查理辛很酷
BBBB
他喜欢跑步
BBB
他什么时候跑?
BBBB

他住在这里
BBBB
?
[
我喜欢查理辛
BBBB

我想将字符串分成两个不同的数组。一个用于 B 顶部的短语和 B 本身。或者更好的是,有一本字典,其中短语作为键,B 作为值。我还想忽略所有空行和不以字母开头的行。我该怎么做呢?

string[] newText = file.Split(new string[] { "\n", "\r\n",},StringSplitOptions.RemoveEmptyEntries);
int count = 0;
Regex symbol = new Regex("^[[]]$"); //these are the symbols I want to detect
Dictionary<string, string> patternedText = new Dictionary<string,string>();

foreach(string s in newText){
int bCount = 0;
count++;
bCount++; //position of where it detects a match
if(symbol.isMatch(s)){ 
newText[count-bCount] = s;
    }else{ newText[count] = s;
   patternedText.Add(newText[count],newText[count+1]);
}

基本上我希望数组的格式为:
带符号的短语
BBB
带符号的短语
BBBB
短语
带符号的 BBB

并过滤掉所有空行和任何一行上的符号,只添加到短语中。

【问题讨论】:

  • 请提供一些代码!到目前为止你尝试过什么?
  • 我编辑了帖子并解释了更多!对此感到抱歉

标签: c# c arrays dictionary


【解决方案1】:

您可以这样做:

  1. 使用 '\n' (换行符)分割字符串,这会给你 所有行的数组。
  2. 使用正则表达式和/或循环进行清理(删除只有一个符号的行和下一行中的 BBB)。
  3. 创建字典并 迭代数组以将第 (n) 个元素作为键和 (n+1)th 元素作为值。 (注意边界线)。

【讨论】:

  • 有没有办法过滤字符串,如果有一个空行,它就不会被添加到新的拆分数组中?
  • 尝试使用 StringSplitOptions.RemoveEmptyEntries 这是 string.split 方法的参数。
  • 有些行只包含一个符号。无论如何要从该行中取出符号并将其移动到上一行?
  • 您要删除符号旁边行中的 BBB.. 吗?我已经更新了答案中的逻辑流程。
  • 不,抱歉。假设 BBB 线下有一个符号,我将如何移动数组以便符号连接到前一个“短语”索引而不是 BBB 索引,这适用于任何行上的任何符号
【解决方案2】:

循环是理智而有效的方法,但如果您是 LINQaholic:

var dictionary = file.Split(new[] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries)
    .Select((line, index) => (line, index))
    .GroupBy(tuple => tuple.index / 2)
    .ToDictionary(group => group.First().line, group => group.Last().line);

【讨论】:

  • 我刚开始使用 C#,还没有使用过 LINQ。你能介绍一下它的作用吗?
  • Select 将每一行文本与其行号配对,以便GroupBy 可以使用行号将每个偶数行与随后的奇数行分组。 ToDictionary 将组序列转换为字典,使用第一行作为键,第二行作为值。这是一个快速且不充分的解释,但是在您了解了构成 LINQ 的基本概念之后,它应该会变得更加清晰。
  • @bautk16 System.Linq 命名空间中有很多漂亮的东西,包括一些IEnumerable&lt;T&gt; 扩展。此答案中提到的三个工作如下:Select 将函数应用于枚举中的每个项目并返回转换后的枚举。 GroupBy 根据您应用的键选择器将可枚举的元素分组到“桶”中,因此键选择器中具有相同结果的项目将进入同一个桶。 ToDictionary 有点像 Select,但它为您提供了一个字典,其中包含从第一个函数生成的键和从第二个函数生成的值。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 2017-09-16
  • 1970-01-01
  • 2015-09-14
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多