2017-09-17 4 views
0

いつものように私はあなたの助けが必要です!C#リストの後でチェックするために保存時間

"XRP"、 "SC"、 "XMR"などのような文字列配列(Cryptocurrencyティッカー名を含む)のforeachの中には、小数点の値が100を超えるかどうかをテストする必要があるこれが本当であれば、私は現在のコインとその値が100を超えた現在の時間を保存する必要がありますが、それが最後の1時間に1回起こった場合に限ります。私はその後、リストには、しきい値がexcedeedされている最後の24時間だけを保持する必要があり、リスト内の要素数を数えます。

これを論理的に考えると、私のコイン文字列をインデックスキーとして使用して、最後の24時間にそのリスト内の値の数を返すことができることを意味します。時間は午後11時00分00秒のとき

は、たとえば のために、それは私が最初の値を必要とする。..

午前17時00分時

Count Coin Time 
[1] XRP 17-09-2017 19:32:40 
[2] XRP 18-09-2017 03:11:29 
[3] XRP 18-09-2017 11:09:38 
[4] XRP 18-09-2017 16:34:42 

[1] SC  17-09-2017 17:35:24 
[2] SC  17-09-2017 23:43:53 
[3] SC  18-09-2017 07:32:44 
[4] SC  18-09-2017 15:43:22 

などで18-09-2017です

Count Coin Time 
[1] XRP 18-09-2017 03:11:29 
[2] XRP 18-09-2017 11:09:38 
[3] XRP 18-09-2017 16:34:42 

[1] SC  17-09-2017 23:43:53 
[2] SC  18-09-2017 07:32:44 
[3] SC  18-09-2017 15:43:22 

私が使用しようとしたコードはこれです:

そうのようなリストから削除取得する24時間以上前に彼らの最初の呼び出しを持っていたすべてのリストの
Dictionary<string, List<DateTime>> CallsDict = new Dictionary<string, List<DateTime>>(); 

List<string> Tickers = new List<string>(new string[]{ "XMR", "SC", "MYST", "NEO", "DGB", "LBC", "ETH", "XRP", "LUN", "OMG", "ARK", "LTC", "QTUM", "BCC", "TRIG", "BTS", "LSK", "OK", "XVG", "CFI" }); 

decimal PercentBuyVolume = 0; 

foreach (var coin in Tickers) 
    { 
     string[] timeFrames = { "oneMin", "thirtyMin", "hour", "day" }; 
     foreach (var interval in timeFrames) 
     { 
     var client = new WebClient(); 

     string URL = ("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=BTC-" + coin + "&tickInterval=" + interval); 
     var chiusure = new List<decimal>(); 
     var BuyVolume = new List<decimal>(); 
     var prices = client.DownloadString(URL); 
     var pricesDeserialized = JsonConvert.DeserializeObject<RootObject>(prices); 
     foreach (var data in pricesDeserialized.result) 
     { 
      chiusure.Add(data.C); 
      if (interval == "hour") { BuyVolume.Add(data.BV); } 
     } 
     int sizeOfArrayClose = chiusure.Count - 1; 
     LP = chiusure[sizeOfArrayClose]; 

     if (interval == "hour") 
     { 
      decimal LastBuyVolume = MA(sizeOfArrayClose, 24, BuyVolume); 
      decimal NowBuyVolume = BuyVolume[sizeOfArrayClose]; 
      decimal PercentCalc = (NowBuyVolume - LastBuyVolume)/LastBuyVolume * 100; 

      PercentBuyVolume = Math.Round(PercentCalc, 2); 

if (PercentBuyVolume > 100) 
{ 
    DateTime CurrentDate = DateTime.Now; 
    Console.WriteLine("Coin: " + coin); 
    List<DateTime> items; 
    if (!CallsDict.TryGetValue(coin, out items)) 
    { 

     CallsDict[coin].Add(DateTime.Now); 
    } 
    else if (CallsDict[coin][(CallsDict[coin].Count - 1)].AddHours(1) < DateTime.Now) 
    { 
     if (CallsDict[coin][0].AddDays(1) < DateTime.Now) 
     { 
      CallsDict[coin].RemoveAt(0); 
      Console.WriteLine("Rimosso per vecchiaia, nuova last call: " + CallsDict[coin][0]); 
     } 
     CallCount = CallsDict[coin].Count; 
     Console.WriteLine("Call Count last 24h: " + CallCount); 
    } 
    } 
    } 

}

私はCallsDict[coin].Add(DateTime.Now); everyime PercentBuyVolumeで例外を取得し、私は何ができる100

の上にありますか? ありがとうございます!

Dictionary<string, List<DateTime>> CallsDict = new Dictionary<string, List<DateTime>>(); 

キーがstringであり、値がList<DateTime>です:

+1

あなたはおそらく 'CallsDict.Add(コイン、新しいリスト {} DateTime.Now)を意味し;' – NotADeveloper

答えて

0

は、あなたは、このような辞書は持っています。 List<DateTime>に追加するには、まずリストを作成する必要があります。リストが作成されているかどうかので、確認してください。

List<DateTime> items; 
if (!CallsDict.TryGetValue("SomeKey", out items)) 
{ 
    CallsDict.Add("SomeKey", new List<DateTime>()); 
} 

をまた、あなたは、コードの行を見て電話し、ちょうどその行を読み取ることによって、その種類を把握すれば、次のように入力することを避けるためにvarを使用することができますこのような全体のタイプ(また、地元の人々のためのキャメルケースを使用):

var callsDict = new Dictionary<string, List<DateTime>>(); 
+0

作品! (CallsDict [コイン] [0])AddHours(1) Revengeic3

+0

@ Revengeic3は別の問題です...あなたがリストを作成すると、何を追加する必要があるか分かっているので、すぐに何かを追加するべきだと思います。 – CodingYoshi

関連する問題