-1

特定の命名規則に一致するPDFからブックマークを抽出するLINQコードがいくつかあります(Aspose.Pdfを使用)。

IOrderedEnumerable<Bookmark> magicBookmarks = (
    from    bookmark in allBookmarks.AsEnumerable()
    where   bookmark.Title.StartsWith(MAGIC_PHRASE) 
    // ...  other criteria
    orderby bookmark.PageNumber ascending
    select  bookmark
);

このBookmarkクラスにはPageNumber、ブックマークが開始するページ番号を取得するというプロパティがあります。私の状況では、ブックマークは1...nページのセクションを表すことができます。

私がやりたいのは、このシーケンスを別のシーケンスTuple<int, int>(または同等の「ペア」構造)に変換することです。ここで、各ペアのItem1はPageNumberソースシーケンスの対​​応する要素の値に等しく、Item2はソースシーケンスの次の要素から1を引いたもの(この演習では、ソースシーケンスのすべてのブックマークが、それらが抽出されたドキュメント内で連続して発生すると想定します)。

つまり、最終結果を、ブックマークされた各PD​​Fセクションの開始ページと終了ページを表す一連のペアにする必要があります。

4

1 に答える 1

2

Enumerable.Zipこれには、最初の要素をスキップするだけで列挙を圧縮することで使用できます。

var results = magicBookmarks.Zip(magicBookmarks.Skip(1), 
                                 (a, b) => new 
                                           { 
                                             PageNumber = a.PageNumber, 
                                             PageNumberNext = b.PageNumber - 1 
                                           });

foreach (var item in results)
{
    Console.WriteLine("Page: {0}, Next: {1}", item.PageNumber, item.PageNumberNext);
}
于 2012-07-08T05:31:19.513 に答える