Это будет мой обновленный подход :
def merge(data):
sets = (set(e) for e in data if e)
results = [next(sets)]
for e_set in sets:
to_update = []
for i,res in enumerate(results):
if not e_set.isdisjoint(res):
to_update.insert(0,i)
if not to_update:
results.append(e_set)
else:
last = results[to_update.pop(-1)]
for i in to_update:
last |= results[i]
del results[i]
last |= e_set
return results
Примечание: во время слияния пустые списки будут удалены.
Обновление: Надежность.
Вам нужно два теста для 100% надежности успеха:
merged = [{0, 1, 3, 4, 5, 10, 11, 16}, {8, 2}, {8}]
from itertools import combinations
for a,b in combinations(merged,2):
if not a.isdisjoint(b):
raise Exception(a,b) # just an example
Я думаю, что это займет некоторое время, но, возможно, это будет стоить того, если вы хотите быть на 100% уверенным.
HttpClient
доступен только в версии 4.5 NET и выше, а Unity не использует эту версию. Unity использует версию 3.5 .NET.
Если вы используете Unity 5.3, UnityWebRequest.Delete
можно использовать для создания запроса на удаление. Его можно найти в пространстве имен Experimental.Networking
. Если вы используете Unity 5.4 и выше, UnityWebRequest
можно найти в пространстве имен UnityEngine.Networking;
.
Полный рабочий пример:
IEnumerator makeRequest(string url)
{
UnityWebRequest delReq = UnityWebRequest.Delete(url);
yield return delReq.Send();
if (delReq.isError)
{
Debug.Log("Error: " + delReq.error);
}
else
{
Debug.Log("Received " + delReq.downloadHandler.text);
}
}
Использование:
StartCoroutine(makeRequest("http://www.example.com/whatever"));
Обязательно включите using UnityEngine.Networking
. Вы можете найти здесь полные примеры здесь .
EDIT (UPDATE)
Unity теперь поддерживает .NET 4.5, поэтому теперь вы можете использовать HttpClient, если ты хочешь. См. этот пост о том, как его включить.
После включения его, перейдите к <UnityInstallationDirectory>\Editor\Data\MonoBleedingEdge\lib\mono\4.5
или, например, C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono\4.5
на моем компьютере.
В этом каталоге скопируйте System.Net.Http.dll
в каталог <ProjectName>\Assets
и вы сможете использовать HttpClient
после импорта пространства имен System.Net.Http
. Если есть некоторая другая ошибка в отношении отсутствующих зависимостей, вы также можете получить DLL с этого пути и скопировать их в каталог <ProjectName>\Assets
.
delReq.SetRequestHeader("Your Header", "Your value");
. Дайте мне знать, если это решит вашу проблему. – Programmer 29 July 2016 в 15:39HttpClient
в последней версии Unity. Удостоверьтесь, чтобы удалить, что когда-либо делал это, я так и говорил. – Programmer 24 July 2018 в 22:27