2014-09-14 1 views
2

Donc, j'ai une liste d'horodatages, ils ne sont pas uniformément espacés, ce qui signifie qu'un horodatage peut être 10 minutes après le précédent ou 5 secondes après. Quel est le meilleur moyen de trouver l'index de l'entrée la plus proche de (DateTime.Now.TotalSeconds - 3600)?Trouver l'horodatage le plus proche d'une heure dans une liste

+0

Deux commentaires: 1. horodatage n'est pas un type bien connu. Voulez-vous dire les objets 'DateTime', ou avez-vous un type défini par l'utilisateur? 2. Il peut être plus lisible d'exprimer «il y a une heure» comme: 'DateTime.Now.Subtract (TimeSpan.FromHours (1));' –

+0

Oui, désolé, j'ai utilisé 'DateTime.UtcNow - UnixEpoch' pour créer un horodatage unix J'utilise comme timestamp – Rawr

Répondre

1

Puisque vous n'avez pas donné de code spécifique, nous ne pouvons que faire des suggestions à ce sujet.

Ce que vous pouvez faire, c'est prendre la différence absolue de la date dans la liste et la comparer à la date désirée, en prenant la plus basse.

Quelque chose comme:

list.OrderBy(x => Math.Abs((x.Date - desiredDate).TotalMilliseconds)).FirstOrDefault(); 
+0

Y at-il de toute façon de le faire sans commander la liste? Je veux garder l'ordre original intact. Je pourrais faire une copie de la liste mais la liste a le potentiel d'avoir 17k entrées:/ – Rawr

+0

Le 'OrderBy' crée une copie, donc cela devrait répondre à vos besoins. –

+0

Aussi, avec 17k résultats, n'est-il pas plus facile de le trier dans la source réelle? Peut-être une base de données? –

Questions connexes