私はシンプルなペアクラスの大規模なコレクションを持っています。私は適切な時にリスト内の各項目の値(例:アクション<ダブル>)を持つイベントをトリガーしたいと思います。時は過去ですから、リストの最初のものが「今」になるようにタイムスタンプを正規化する必要があります。 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 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>とモデル:
- 2. Javaに関して<E> public static <E> void
- 3. 私はクライアント例えば</p> <pre><code>public class Client { public string ClientID { get; set; } // Client public decimal Amount { get; set; } // Sales $ } </code></pre> <p>のリストを持っているグループ化された結果
- 4. JPanelのは、私がフレームに<code>HelloWorld</code>のオブジェクトを追加<code>JPanel</code></p> <pre><code>public class HelloWorld extends JPanel implements KeyListener </code></pre> <p>から拡張クラスを使用しています<code>JFrame</code>のサブクラスを持っているのKeyListenerイベント
- 5. 引数としてのインターフェイスまたはジェネリックメソッド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>:
- 6. C#ラムダ?</p> <p><code>public int ID;</code></p> <p><code>public MovingObject character;</code></p> <p>私は多分、行う必要があります。クラスのリストでプロパティ(文字)が1
- 7. プロパティはどのようにカプセル化を提供しますか? 、代わりにフィールド_specialStringを使用しての、ここで</p> <pre><code>class SitePage { private string _specialString; public string SpecialString { get { return _specialString; } set { _specialString = value; } }} </code></pre> <p>:
- 8. 子プロパティと親プロパティを比較しますか?私は細部のコレクションの合計量は、マスターの総量プロパティに等しくなるように、ルールを作成しようとしている</p> <pre><code>public class Master { public int? TotalAmount; public ICollection<Detail> Details; } public class Detail { public int Amount; } </code></pre> <p>:
- 9. linqクエリで階層データの深さを取得する方法は?</p> <pre><code>var list = new List<Data>(){some data...} class Data { public int number; public List<Data> info; } </code></pre> <p>注:
- 10. public static HashSet <string>スレッドセーフですか?
- 11. スーパークラスのコンストラクタ引数をインターセプトするには?次のクラス定義を考えると</p> <p>::ランダムな整数ジェネレータを使用してスーパークラスを初期化し</p> <pre><code>public class ClassA { public ClassA(int x) { // do some calculationand initialize the state } } </code></pre> <p>とその子クラス
- 12. Scala: "val"を識別子として使用できますか? Scalaでは、この属性を取得する方法を</p> <pre><code>public class XYZ { public int val=... } </code></pre> <p>があります。javaライブラリーへのリンクはそれを私のScalaのコードで
- 13. なぜコンストラクタは一度だけ呼び出されますか?私は出力を取得しています</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>:
- 14. 次のクラス定義</p> <pre><code>public class MyClass { [System.ComponentModel.Browsable(true)] [field:NonSerialized] public event EventHandler MyEvent; } </code></pre> <p>に他の私のコードのどこかを考える場のようなイベント
- 15. 我々は</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>内部クラスを持っている匿名クラスのオブジェクト
- 16. {*; * {の追加を何この文では</p> <pre><code>-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; } </code></pre> <p>;:} ProGuardの
- 17. Tortoise svn <<<<をファイルに追加しています!
- 18. スレッディング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スレッド
- 19. は<code>public interface Constants</code>内
- 20. --process-isolationオプションを指定してPhpUnitテストをデバッグすることはできますか? 5行目にブレークポイントとunittestの</p> <pre><code>class SampleTest extends PHPUnit_Framework_TestCase { public function testBreakpoint() { $a = 18; } } </code></pre><p>について
- 21. 春:</p> <pre><code>@Service public class BeanDefault implements BeanBase { } public class App { @Autowired private BeanBase beanBase; } </code></pre> <p>プロジェクト<code>MyDerived</code>(<code>Base</code>はMavenの中01の親であり、多くの他の派生プロジェクトがある):デフォルト
- 22. Java:What is - public static <T> foo(){...}?
- 23. Javaのソートされた一意のオブジェクトにはどのような型コレクションが使用されますか?私はソートされたユニークなアイテムのために必要な</p> <pre><code>public class Vector3i { public int x, y, z; public Vector3i(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } } </code></pre> <p>何コレクション:
- 24. エンティティは、まだ私は春データのNeo4j 4で作業すると、次のユーザエンティティのNeo4j GraphRepositoryを使用して</p> <pre><code>@NodeEntity public class User{ private Long id; private String username; //Getter, Setter } </code></pre> <p>を持ってる
- 25. null可能なdatetimeから日付を取得していますか?</p> <pre><code>q = q.AsQueryable() .Where(c => c.CallNextDate.Date < DateTime.Now.Date) .ToList(); </code></pre> <p>しかし<code>c.CallNextDate.Date</code>は使用できません。私はこのように、このLINQを使用しています後ろ
- 26. ハンドラ内のイベントから退会することはいつでも安全ですか?それから、イベントハンドラを解除しても安全だろう</p> <pre><code>public class Test { public event EventHandler SomeEvent; void OnSomeEvent(EventArgs e) { if (SomeEvent != null) SomeEvent(this, e); } } </code></pre> <p>:
- 27. Spring 3.x - データを返すマッピングからどのようにリダイレクトするのですか?</p> <pre><code>@RequestMapping(value="getData", method=RequestMethod.GET) @ResponseBody public List<MyDataObj> getData() { return myService.getData(); } </code></pre> <p>データは要求に応じて、JSONまたはXSLとして返されます:
- 28. は私が作曲を使用して、特定のパッケージを含めています以下のような構造</p> <pre><code>application: controllers: - SomeController.php - SomeOtherController.php public: - index.php </code></pre> <p>を持つ作曲
- 29. A.</p> <pre><code>class A { }; class B : public A { }; </code></pre> <p>そして、私は3つのオブジェクトを持っているから継承C++ 11
- 30. 春データのNeo4jは、私が定義されていないカスタムメソッドを持つ</p> <pre><code>@Repository public interface PointOfInterestRepository extends GraphRepository<Poi> { // currently empty } </code></pre> <p>リポジトリを持っている性質
http://reactiveproperty.codeplex.com/をご覧ください。 – dwerner