私はシンプルなペアクラスの大規模なコレクションを持っています。私は適切な時にリスト内の各項目の値(例:アクション<ダブル>)を持つイベントをトリガーしたいと思います。時は過去ですから、リストの最初のものが「今」になるようにタイムスタンプを正規化する必要があります。 Reactive Extensionsでこれを設定して、2つのアイテム間の時間差の後に次のイベントをトリガーすることはできますか?RXを使用してさまざまな時期にイベントをトリガーしますか?</p> <pre><code>public class Pair { public DateTime Timestamp; public double Value; } </code></pre> <p>彼らが昇順のタイムスタンプでソートされています
答えて
セイpairs
はあなたの順序である:今
var obs = pairs.OrderBy(p => p.Timestamp).ToObservable();
obs
は、注文した観測可能とペアです。
Observable.Zip(
obs,
obs.Take(1).Concat(obs),
(pair1, pair2) => Observable.Timer(pair1.Timestamp - pair2.Timestamp)
.Select(_ => pair1.Value))
.Concat()
.Subscribe(/* Do something here */);
ジップは絶対時間をオフセットに変換します。この新しい値はその後、それを適切な量を遅らせるためにObservable.Timer
に入れて
Original 1--2--4--7--11
Offset 1--1--2--4--7--11
Joined 0--1--2--3--4
次のようにそれは、1でシーケンスを取り、自分自身でそれに参加するが、オフセットされます。最後のConcat
はIObservable<IObservable<double>>
の結果をIObservable<double>
にフラット化します。これはあなたのシーケンスが注文されていると仮定します。
良い解決策。私は 'var orderedObs = pairs.OrderBy(p => p.Timestamp).ToObservable()'を追加して、何が起こる必要があるかを明らかにし、代わりにそれを使用します。私はこれらの変更を行った。 – yamen
これは多くの助けになる。私は履歴データを照会し、元々記録されたようにそれを再生するために使用しました。新しいシステムが動作することを証明するシミュレータ。 –
正確に何が起こっていたのか把握するのにちょっと時間をかけましたが、今すぐ取得します。 Rxはマインド***です。しかし、素晴らしい解決策。 +1 – BFree
私はこの問題が面白いと思う、これは私が最初にそれに行くだろう。
static void RunPairs(IEnumerable<Pair> pairs, Action<double> pairEvent)
{
if (pairs == null || !pairs.Any() || pairEvent == null)
return;
// if we can promise the pairs are already sorted
// obviously we don't need this next line
pairs = pairs.OrderBy(p => p.Timestamp);
var first = pairs .First().Timestamp;
var wrapped = pairs.Select(p => new { Offset = (p.Timestamp - first), Pair = p });
var start = DateTime.Now;
double interval = 250; // 1/4 second
Timer timer = new Timer(interval);
timer.AutoReset = true;
timer.Elapsed += (sender, elapsedArgs) =>
{
var signalTime = elapsedArgs.SignalTime;
var elapsedTime = (signalTime - start);
var pairsToTrigger = wrapped.TakeWhile(wrap => elapsedTime > wrap.Offset).Select(w => w.Pair);
wrapped = wrapped.Skip(pairsToTrigger.Count());
if (!wrapped.Any())
timer.Stop();
foreach (var pair in pairsToTrigger)
pairEvent(pair.Value);
};
timer.Start();
}
「のRxを使用」により、あなたは、これは非常に簡単な解決策である、私はただのRxスケジューラを使用することを許可する場合:
Action<double> action =
x =>
Console.WriteLine(x);
var ts0 = pairs.Select(p => p.Timestamp).Min();
pairs
.ForEach(p =>
Scheduler
.ThreadPool
.Schedule(
p.Timestamp.Subtract(ts0),
() => action(p.Value)));
これはSystem.Interactive
拡張ForEach
を使用しますが、あなただけ使用することができます通常のforeach
ループを使用してスケジューラをロードします。
は、私は、次のダミーデータでコードをテストしてみた:
var pairs = new []
{
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 30), Value = 1.1, },
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 45), Value = 1.2, },
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 40), Value = 1.3, },
};
私はこのことができます願っています。
スケジューラには独自のキューがありますか?または、このコードはスレッドプール全体を噛み砕くでしょうか?私はこのソリューションのスケーラビリティが心配です。 – Brannon
@Brannon - スケジューラが内部的にヒープソートを使用して、アクションをキューに入れていると正しく思い出しています。また、スケジューラは一度に1つのアクションしか実行せず、別のアクションがすぐに実行できるようになったら現在のスレッドを再利用します。したがって、スレッドは一度に1つのスレッドしか使用しません。 – Enigmativity
- 1. Automapper:</p> <pre><code>public class PriceDto { public string Ticker {get; set;} public double Open {get; set;} public double Close {get; set;} } </code></pre> <p>ソースオブジェクト::私はDTOオブジェクトには、次のしているだけで
- 2. 特定のプロパティを検証から除外します。私は他の人には、タイプのみBタイプを使用しているいくつかのケースでは</p> <pre><code>public class A{ public B Property{ get; set; } } public class B{ public string Name{ get; set; } } </code></pre> <p>:FluentValidation
- 3. AutoMapperで匿名オブジェクトをクラスにマップする方法は?</p> <pre><code>public class Tag { public int Id { get; set; } public string Word { get; set; } // other properties... // and a collection of blogposts: public ICollection<Post> Posts { get; set; } } </code></pre> <p>とモデル:
- 4. 私は次のようにコンストラクタでintilizeしようとしていながら、私はこの</p> <pre><code>public class Menu { public int MenuID { get; set; } public string MenuName { get; set; } public string LinkAddress { get; set; } public Menu[] menu; } </code></pre> <p>のようなクラスを持つC#のコンストラクタ
- 5. 私は、たとえば、これを行うだろうTTYPE =パラメータ、</p> <pre><code>public class Parameter { public string VendorId { get; set; } public string RunMonth { get; set; } public string CoverageMonth1 { get; set; } } </code></pre> <p>リストをソートしたい場合は、リスト<TTYPE>
- 6. 私はクライアント例えば</p> <pre><code>public class Client { public string ClientID { get; set; } // Client public decimal Amount { get; set; } // Sales $ } </code></pre> <p>のリストを持っているグループ化された結果
- 7. Javaに関して<E> public static <E> void
- 8. 春ブーツ:</p> <pre><code>@Controller public class RootController { @RequestMapping(value = "/", method = RequestMethod.GET) public String root() { return "index"; } } </code></pre> <p>2)私のフォルダに:</p> <p>1)私は、コントローラを持っている:静的ページ
- 9. NAVが、私は、ブートストラップサイト<a href="http://www.soygarota.com/blog/public" rel="nofollow">http://soygarota.com/blog/public</a></p> <p>に取り組んでいます
- 10. これらのビューは何をしていますか?私が使用されるように、このような見解に気づいた唯一の場所はで、リソースクラスである</p> <pre><code>package api.views; public class FooView { public static class FindAll { } public static class Item { } } </code></pre> <p>:私は、そのビューパッケージに含まれていdropwizardプロジェクト、次のような一連のクラスを勉強しています
- 11. JPanelのは、私がフレームに<code>HelloWorld</code>のオブジェクトを追加<code>JPanel</code></p> <pre><code>public class HelloWorld extends JPanel implements KeyListener </code></pre> <p>から拡張クラスを使用しています<code>JFrame</code>のサブクラスを持っているのKeyListenerイベント
- 12. 私はクラスからのリストオブジェクトを作成し、今この</p> <pre><code>public class SummaryA { public string name { get; set; } public string surename { get: set; } public int age { get; set;} } </code></pre> <p>のようにC#でコードを作成する可能性について必要がある#
- 13. C#ラムダ?</p> <p><code>public int ID;</code></p> <p><code>public MovingObject character;</code></p> <p>私は多分、行う必要があります。クラスのリストでプロパティ(文字)が1
- 14. 空の "public class xList <E>はArrayListを拡張します<E>"は具体的ですか?
- 15. 引数としてのインターフェイスまたはジェネリックメソッドwhere - 違いは何ですか?</p> <pre><code>public void Method1<T>(class1 c, T obj) where T:Imyinterface </code></pre> <p>そして</p> <pre><code>public void Method2(class1 c, Imyinterface obj) </code></pre> <p>:
- 16. のWebPACK 2:</p> <p>まず:UglifyJs予期しない文字「`」から./public/bundle.jsでERRORは
- 17. public static HashSet <string>スレッドセーフですか?
- 18. 子プロパティと親プロパティを比較しますか?私は細部のコレクションの合計量は、マスターの総量プロパティに等しくなるように、ルールを作成しようとしている</p> <pre><code>public class Master { public int? TotalAmount; public ICollection<Detail> Details; } public class Detail { public int Amount; } </code></pre> <p>:
- 19. キャッチされないでSyntaxError:予期しないトークン<DOCTYPE用HTML PUBLIC
- 20. linqクエリで階層データの深さを取得する方法は?</p> <pre><code>var list = new List<Data>(){some data...} class Data { public int number; public List<Data> info; } </code></pre> <p>注:
- 21. プロパティはどのようにカプセル化を提供しますか? 、代わりにフィールド_specialStringを使用しての、ここで</p> <pre><code>class SitePage { private string _specialString; public string SpecialString { get { return _specialString; } set { _specialString = value; } }} </code></pre> <p>:
- 22. スーパークラスのコンストラクタ引数をインターセプトするには?次のクラス定義を考えると</p> <p>::ランダムな整数ジェネレータを使用してスーパークラスを初期化し</p> <pre><code>public class ClassA { public ClassA(int x) { // do some calculationand initialize the state } } </code></pre> <p>とその子クラス
- 23. Scala: "val"を識別子として使用できますか? Scalaでは、この属性を取得する方法を</p> <pre><code>public class XYZ { public int val=... } </code></pre> <p>があります。javaライブラリーへのリンクはそれを私のScalaのコードで
- 24. PlayのtoJsonを作成するには、外部ライブラリを使用せずにモデルのいくつかのフィールドをスキップしますか?私は<strong>toJson(人)</strong>を行うときに、私はこの</p> <pre><code>@Entity public class Person extends Model { @Id public int id; public String name; } </code></pre> <p>のようなエンティティを作成しようとしています
- 25. なぜコンストラクタは一度だけ呼び出されますか?私は出力を取得しています</p> <pre><code>class A { public: A(int i) { cout<<"Called"<<endl; } }; int main() { vector<A> v(5,A(1)); return 0; } </code></pre> <p>:
- 26. 次のクラス定義</p> <pre><code>public class MyClass { [System.ComponentModel.Browsable(true)] [field:NonSerialized] public event EventHandler MyEvent; } </code></pre> <p>に他の私のコードのどこかを考える場のようなイベント
- 27. 我々は</p> <pre><code>class OuterClass { public Iterator getIterator(final String name) { class LocalIterator implements Iterator { public Iterator next() { return new LocalIterator(); } } return new LocalIterator(); } } </code></pre> <p>内部クラスを持っている匿名クラスのオブジェクト
- 28. {*; * {の追加を何この文では</p> <pre><code>-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; } </code></pre> <p>;:} ProGuardの
- 29. スレッディングAndroidのは、今私は</p> <pre><code>public void someStuff(){ new Thread(new Runnable() { @Override public void run() { //doing long task doOtherStuff(); } }).start(); } public void doOtherStuff(){ doEvenMoreStuff(); } </code></pre> <p>をやってるUIスレッド
- 30. は<code>public interface Constants</code>内
http://reactiveproperty.codeplex.com/をご覧ください。 – dwerner