你好,我有一个table
,我想在给定文档后获取所有documents
。
问题是我没有看到skipwhile
功能,您给了predicate
。
因此,我不得不求助于首先找到给定元素的索引。这是如何实现的?
示例:鉴于文档{"a":1 }
,{"b":2}
,{"a":33}
,{"c":44}
,{"d":33}
,我想拿走所有最后一个a
之后的元素,因此我想获得:[ {"c":44},{"d":33}]
这是可以通过RethinkDB
驱动程序实现的,还是我在处理完所有表格后需要解决此问题。
答案 0 :(得分:1)
所以我不得不求助于首先找到给定元素的索引。怎么样 那可以实现吗?
您可以使用offsetsOf()功能。它返回与您的搜索元素匹配的索引数组。您可以按以下方式获取{"a":33}
文档的索引:
r.expr([{"a":1 },{"b":2},{"a":33},{"c":44},{"d":33}])
.offsetsOf({"a":33}).nth(0)
要进一步遍历其余元素,可以使用r.range()函数,如下所示:
r.expr([{"a":1 },{"b":2},{"a":33},{"c":44},{"d":33}])
.do(function(docs){
return docs.offsetsOf({"a":33}).nth(0)
.do(function(index){
return r.range(index.add(1), docs.count())
.map(function(i){
return docs.nth(i)
})
})
})
答案 1 :(得分:0)
尝试以下代码:
List<KeyValuePair<string, int>> input = new List<KeyValuePair<string, int>>() {
new KeyValuePair<string, int>("a", 1),
new KeyValuePair<string, int>("b", 2),
new KeyValuePair<string, int>("a",33),
new KeyValuePair<string, int>("c",44),
new KeyValuePair<string, int>("d",33)
};
int skipIndex = input.Select((x, i) => new { value = x, index = i }).Where(x => x.value.Key == "a").Last().index;
List<KeyValuePair<string, int>> results = input.Skip(skipIndex + 1).ToList();
答案 2 :(得分:0)
按照您提出的示例,我试图保存您的问题:
-我有一个包含以下文件/文档的文件夹{a.txt,b.txt,c.txt,d.txt,f.txt}
-我希望在-count-(出现在GetFilesAfterFilename函数中)时间之后出现名称为“ b.txt”的所有文件的数组。
using System;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo DirectoryOfDocuments = new DirectoryInfo(Environment.CurrentDirectory+ @"\documents");//Get direcory with your files(Ex: a.txt,b.txt,c.txt,d.txt,..)
FileInfo[] OldFileInfo = DirectoryOfDocuments.GetFiles();//Get all files out of your directory
FileInfo[] NewFileInfo = GetFilesAfterFilename(OldFileInfo, 1, "c.txt");
foreach (FileInfo fi in NewFileInfo)
{
Console.WriteLine(fi.ToString());
}
Console.Read();
}
static FileInfo[] GetFilesAfterFilename(FileInfo[] OriginArray, int count, string FileName) {
List<FileInfo> NewFileInfo = new List<FileInfo>();
int FileNameOccurrence = 0;
foreach (FileInfo fi in OriginArray)
{
if (FileNameOccurrence == count){//Add all Files from OriginArray after [count] time occurrence of somewhat file/document
NewFileInfo.Add(fi);
}else if (fi.ToString()==FileName) {
FileNameOccurrence++;
}
}
return NewFileInfo.ToArray();
}
}
}