我有一段文本是从 Gedcom(Here 和 Here)文件中提取的
文字是扁平的,基本上分成“节点”
我正在拆分\r 字符上的每个节点,从而将其分割为每个部分(“行”的数量可能会有所不同)
我知道 0 地址将始终是 ID 但在那之后一切都可以在任何地方所以我想测试数组的每个单元格以查看它是否包含我要处理的正确标签
两个节点的示例
0 @ind23815@ INDI <<<<<<<<<<<<<<<<<<< Start of node 1 1 NAME Lawrence /Hucstepe/ 2 DISPLAY Lawrence Hucstepe 2 GIVN Lawrence 2 SURN Hucstepe 1 POSITION -850,-210 2 BOUNDARY_RECT (-887,-177),(-813,-257) 1 SEX M 1 BIRT 2 DATE 1521 1 DEAT Y 2 DATE 1559 1 NOTE * Born: Abt 1521, Kent, England 2 CONT * Marriage: Jane Pope 17 Aug 1546, Kent, England 2 CONT * Died: Bef 1559, Kent, England 2 CONT 1 FAMS @fam08318@ 0 @ind23816@ INDI <<<<<<<<<<<<<<<<<<<<<<< Start of Node 2 1 NAME Jane /Pope/ 2 DISPLAY Jane Pope 2 GIVN Jane 2 SURN Pope 1 POSITION -750,-210 2 BOUNDARY_RECT (-787,-177),(-713,-257) 1 SEX F 1 BIRT 2 DATE 1525 1 DEAT Y 2 DATE 1609 1 NOTE * Born: Abt 1525, Tenterden, Kent, England 2 CONT * Marriage: Lawrence Hucstepe 17 Aug 1546, Kent, England 2 CONT * Died: 23 Oct 1609 2 CONT 1 FAMS @fam08318@ 0 @ind23817@ INDI <<<<<<<<<<< start of Node 3
所以当我完成时,我有一个看起来像的数组
address , string 0 = "1 NAME Lawrence /Hucstepe/" 1 = "2 DISPLAY Lawrence Hucstepe" 2 = "2 GIVN Lawrence" 3 = "2 SURN Hucstepe" 4 = "1 POSITION -850,-210" 5 = "2 BOUNDARY_RECT (-887,-177),(-813,-257)" 6 = "1 SEX M" 7 = "1 BIRT " 8 = "1 FAMS @fam08318@"
所以我的问题是搜索上述数组以查看哪个 Cell 具有 SEX 标签或 NAME 标签或 FAMS 标签的最佳方法是什么
这是我的代码
private int FindIndexinArray(string[] Arr, string search) { int Val = -1; for (int i = 0; i < Arr.Length; i++) { if (Arr[i].Contains(search)) { Val = i; } } return Val; }
但它似乎效率低下,因为我最终调用它两次以确保它不会返回 -1
像这样
if (FindIndexinArray(SubNode, "1 BIRT ") != -1) { //将生日添加到 Struct I.BirthDay = SubNode[FindIndexinArray(SubNode, "1 BIRT ") + 1].Replace("2 DATE ", "").Trim(); }
抱歉,这是一个较长的帖子,但希望你们能得到一些专家的建议
最佳答案
可以使用Array类的静态方法FindAll: 如果可行的话,它会返回字符串本身。
string[] test = { "Sex", "Love", "Rock and Roll", "Drugs", "Computer"};
Array.FindAll(test, item => item.Contains("Sex") || item.Contains("Drugs") || item.Contains("Computer"));
=> 表示lamda 表达式。基本上是一种没有具体实现的方法。 如果 lamda 让您毛骨悚然,您也可以这样做。
//Declare a method
private bool HasTag(string s)
{
return s.Contains("Sex") || s.Contains("Drugs") || s.Contains("Computer");
}
string[] test = { "Sex", "Love", "Rock and Roll", "Drugs", "Computer"};
Array.FindAll(test, HasTag);
关于c# - 查找字符串数组的哪个单元格包含文本的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855901/