- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字符串 block 文件,每个字符串 block 都以特定关键字结尾。我目前有一个流阅读器设置,它将文件的每一行添加到列表中,直到当前 block 的末尾(行包含指示 block 结束的关键字)。
listName.Add(lineFromFile);
每个 block 都包含信息,例如书籍 bookName、作者 AuthorName、期刊 JournalName 等。所以每个 block 假设是一个项目(书籍、期刊、 session 等)。
现在有大约 50 block 左右的信息(项目),我需要一些方法来存储信息,以便我可以操作它并存储每个作者、标题、页面等,并知道什么信息与什么项目等.
在打字时,我想到了可能将每个 Item 存储为名为“Item”的类的对象的想法,但是可能有多个作者,我不确定如何实现这一点,正如我在想的那样也许使用计数器来命名变量,例如
int i = 0;
String Author[i] = "blahblah";
i++;
但据我所知这是不允许的?所以我的问题基本上是什么是存储每个项目的最简单/最简单的方法,以便我可以操纵字符串来存储每个项目以供以后使用。
@yamen 这是文件的示例:
Author Bond, james
Author Smith John A
Year 1994
Title For beginners
Book Accounting
Editor Smith Joe
Editor Doe John
Publisher The University of Chicago Press
City Florida, USA
Pages 15-23
End
Author Faux, M
Author Sedge, M
Author McDreamy, L
Author Simbha, D
Year 2000
Title Medical advances in the modern world
Journal Canadian Journal of medicine
Volume 25
Pages 1-26
Issue 2
End
Author McFadden, B
Author Goodrem, G
Title Shape shifting dinosaurs
Conference Ted Vancouver
City Vancouver, Canada
Year 2012
Pages 2-6
End
最佳答案
更新代替您的样本
如何解析字符串超出了这个答案的范围 - 你可能想自己尝试一下,然后问另一个 SO(我建议阅读 SO 的黄金法则:https://meta.stackexchange.com/questions/128548/what-stack-overflow-is-not)。
因此,我将假设您有一个字符串表示完整的书籍/期刊信息 block (此数据看起来像引文),然后介绍解决方案。我原来的回答的主要变化是你有多个作者。此外,您可能还需要考虑是否要将作者姓名转换回 [first name/initial] [middle names] [surname]
.
我提出了两个解决方案 - 一个使用 Dictionary
和一个使用 Linq
. Linq 解决方案是单行的。
定义一个 Info
存储项目的类:
public class Info
{
public string Title { get; private set; }
public string BookOrJournal { get; private set; }
public IEnumerable<string> Authors { get; private set; }
//more members of pages, year etc.
public Info(string stringFromFile)
{
Title = /*read book name from stringFromFile */;
BookOrJournalName = /*read journal name from stringFromFile */;
Authors = /*read authors from stringFromFile */;
}
}
请注意 stringFromFile
应该是引用信息的一个 block ,包括换行符。
现在一个字典来存储每个作者的信息:
Dictionary<string, List<Info>> infoByAuthor =
new Dictionary<string, List<Info>>(StringComparer.OrdinalIrgnoreCase);
注意 OrdinalIgnoreCase
比较器 - 处理作者姓名以不同大小写打印的情况。
给定一个 List<string>
你要根据你的 listName.Add
添加到,这个简单的循环就可以解决问题:
List<Info> tempList;
Info tempInfo;
foreach(var line in listName)
{
if(string.IsNullOrWhiteSpace(line))
continue;
tempInfo = new Info(line);
foreach(var author in info.Authors)
{
if(!infoByAuthor.TryGetValue(author, out tempList))
tempInfo[author] = tempList = new List<Info>();
tempList.Add(tempInfo);
}
}
现在您可以遍历字典,并且每个 KeyValuePair<string, List<Info>>
会有一个 Key
等于作者姓名和 Value
将是 Info
的列表具有该作者的对象。请注意 AuthorName
的大小写将从文件中保留,即使您不区分大小写地分组,这样两个项目带有 "jon skeet"
和 "Jon Skeet"
将被分组到同一个列表中,但它们的原始案例将保留在 Info
上.
还编写了代码以确保只有一个 Info
实例是根据引用创建的,出于多种原因(内存、集中更新等),这是更可取的。
或者,使用 Linq,您可以简单地执行以下操作:
var grouped = listName.Where(s => !string.IsNullOrWhiteSpace(s))
.Select(s => new Info(s))
.SelectMany(i =>
s.Authors.Select(ia => new KeyValuePair<string, Info>(ia, i))
.GroupBy(kvp => kvp.Key, kvp => kvp.Value, StringComparer.OrdinalIgnoreCase);
现在您有可枚举的组,其中 Key
是作者姓名,内部可枚举是所有 Info
具有该作者姓名的对象。此处也将观察到关于“两个双向飞碟”的相同大小写保留行为。
关于C# 存储输入文件中的字符串以供操作和使用的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594539/
我正在努力做到这一点 在我的操作中从数据库获取对象列表(确定) 在 JSP 上打印(确定) 此列表作为 JSP 中的可编辑表出现。我想修改然后将其提交回同一操作以将其保存在我的数据库中(失败。当我使用
我有以下形式的 Linq to Entities 查询: var x = from a in SomeData where ... some conditions ... select
我有以下查询。 var query = Repository.Query() .Where(p => !p.IsDeleted && p.Article.ArticleSections.Cou
我正在编写一个应用程序包,其中包含一个主类,其中主方法与GUI类分开,GUI类包含一个带有jtabbedpane的jframe,它有两个选项卡,第一个选项卡包含一个jtable,称为jtable1,第
以下代码产生错误 The nested query is not supported. Operation1='Case' Operation2='Collect' 问题是我做错了什么?我该如何解决?
我已经为 HA redis 集群(2 个副本、1 个主节点、3 个哨兵)设置了本地 docker 环境。只有哨兵暴露端口(10021、10022、10023)。 我使用的是 stackexchange
我正在 Desk.com 中构建一个“集成 URL”,它使用 Shopify Liquid 模板过滤器语法。对于开始日期为 7 天前而结束日期为现在的查询,此 URL 需要包含“开始日期”和“结束日期
你一定想过。然而情况却不理想,python中只能使用类似于 i++/i--等操作。 python中的自增操作 下面代码几乎是所有程序员在python中进行自增(减)操作的常用
我需要在每个使用 github 操作的手动构建中显示分支。例如:https://gyazo.com/2131bf83b0df1e2157480e5be842d4fb 我应该显示分支而不是一个。 最佳答
我有一个关于 Perl qr 运算符的问题: #!/usr/bin/perl -w &mysplit("a:b:c", /:/); sub mysplit { my($str, $patt
我已经使用 ArgoUML 创建了一个 ERD(实体关系图),我希望在一个类中创建两个操作,它们都具有 void 返回类型。但是,我只能创建一个返回 void 类型的操作。 例如: 我能够将 book
Github 操作仍处于测试阶段并且很新,但我希望有人可以提供帮助。我认为可以在主分支和拉取请求上运行 github 操作,如下所示: on: pull_request push: b
我正在尝试创建一个 Twilio 工作流来调用电话并记录用户所说的内容。为此,我正在使用 Record,但我不确定要在 action 参数中放置什么。 尽管我知道 Twilio 会发送有关调用该 UR
我不确定这是否可行,但值得一试。我正在使用模板缓冲区来减少使用此算法的延迟渲染器中光体积的过度绘制(当相机位于体积之外时): 使用廉价的着色器,将深度测试设置为 LEQUAL 绘制背面,将它们标记在模
有没有聪明的方法来复制 和 重命名 文件通过 GitHub 操作? 我想将一些自述文件复制到 /docs文件夹(:= 同一个 repo,不是远程的!),它们将根据它们的 frontmatter 重命名
我有一个 .csv 文件,其中第一列包含用户名。它们采用 FirstName LastName 的形式。我想获取 FirstName 并将 LastName 的第一个字符添加到它上面,然后删除空格。然
Sitecore 根据 Sitecore 树中定义的项目名称生成 URL, http://samplewebsite/Pages/Sample Page 但我们的客户有兴趣降低所有 URL(页面/示例
我正在尝试进行一些计算,但是一旦我输入金额,它就会完成。我只是希望通过单击按钮而不是自动发生这种情况。 到目前为止我做了什么: Angular JS - programming-fr
我的公司创建了一种在环境之间移动文件的复杂方法,现在我们希望将某些构建的 JS 文件(已转换和缩小)从一个 github 存储库移动到另一个。使用 github 操作可以实现这一点吗? 最佳答案 最简
在我的代码中,我创建了一个 JSONArray 对象。并向 JSONArray 对象添加了两个 JSONObject。我使用的是 json-simple-1.1.jar。我的代码是 package j
我是一名优秀的程序员,十分优秀!