-2
votes

Comment puis-je convertir cette linq en bool

Comment convertir une requête en bool? J'ai utilisé le "Tout (x => x)" mais n'a pas donné la réponse dont j'avais besoin.

ligne de code xxx

Dans ce cas, le listcost aurait des éléments 2 , je devais vérifier si le checkiteminventory a ces éléments 2 .


3 commentaires

Je m'excuse pour toute erreur ou mauvaise explication. Je viens du Brésil et mon anglais n'est pas le meilleur. Si ce serait deux listes, je dois vérifier si la liste (Checkiteminventory) contient les éléments de la liste (Listcost). Ce dont j'ai besoin au cas où est-ce, si j'ai le montant ou plus, cela revient vrai, si je ne l'ai pas, cela revient faux.


Je l'ai mis en œuvre, mais apparemment, cela continue de retourner vrai, même sans aucun article dans l'inventaire.


Je mets le script de Builditem et une image, pour essayer d'illustrer ce qui est nécessaire.


5 Réponses :


3
votes

"Tous les éléments de l'inventaire ont un identifiant présent dans ListCost". ListCost doit avoir le même nombre d'éléments que l'inventaire (en supposant que l'identifiant est unique) peut-être plus, afin de tenir une chance de retourner true xxx pré>

"au moins un élément de l'inventaire a une identité à laquelle est également dans ListCost ". ListCost pourrait n'avoir qu'une seule pièce d'identité, avoir une chance de retourner true p> xxx pré>

comme vous pouvez le constater, aucun de ceux-ci n'est ce que vous voulez comme vous semblez dire Vous souhaitez vérifier si chaque article de ListCost est également présent dans l'inventaire. Ceci est comme le code supérieur, mais l'inverse ("Tous les éléments de liste de liste sont présents dans l'inventaire" VS "Tous les éléments de l'inventaire sont présents dans ListCost" P>

Je pense que je vais faire un dictionnaire de l'inventaire en premier, à moins que ce soit déjà quelque chose qui prend en charge une recherche rapide: p> xxx pré>

Si l'inventaire est petit, vous pouvez utiliser cette approche: p>

var recipe = axeRecipe.GroupBy(item => item)

/*
  now we have a grouping of the recipe[item].Key as the material and a
  recipe[item].Count() of how much. The group is like a dictionary:

  recipe[Constants.WOOD] = new List<int>{ Constants.WOOD };
  recipe[Constants.STONE] = new List<int>{ Constants.STONE, Constants.STONE, };
  A group item has a Key and a list of objects that have that key
  Because my recipe was simply ints, the Key is the same number as all the 
  items in the list
*/

//for all items in the recipe
grp.All(groupItem =>
  //does the player inventory contain any item
  playerInventory.Any(inventoryItem => 
    //where the material kind is the same as the recipe key (material)
    inventoryItem.ItemKindId == groupItem.Key &&
    //and the count they have of it, is enough to make the recipe
    inventoryItem.CountOf >= groupItem.Count()
);


15 commentaires

Dans ce cas, le listcost aurait 2 éléments, je devais vérifier si l'inventaire a ces 2 éléments.


Merci beaucoup, je m'excuse à nouveau parce que mon anglais est très basique, alors je vous épargne quelques mots pour éviter les complications. Merci de votre aide. :)


Dans le cas où j'avais dans la liste de liste plus de 1 élément avec le même ID, par exemple ListeCost ayant 2 pierres et 1 bois?


Probablement mieux si vous donnez un exemple qui me permet de le lier à un problème du monde réel, comme "J'écris un jeu et le joueur peut choisir des choses sur le terrain, mais ils ne peuvent que les utiliser s'ils les ont jamais achetés avant .. Donc, j'ai un potentiel de contrôle qui est une liste de choses que le joueur a acheté auparavant et un listcost qui est des choses que le joueur est ramassé. Donc je veux savoir si le joueur peut utiliser toutes les choses qu'il contient actuellement pour que je puisse utiliser couleur mon bouton d'utilisation vert ou rouge si l'une des choses ne peut pas être utilisée "


Je m'excuse de ne pas très bien expliquer. CheckitemInventory = Liste des éléments que le joueur a ramassé sur le sol. ListCost = La liste des éléments nécessaires au joueur pour créer un nouvel élément. Ce que j'ai besoin de faire = vérifier si la liste (CheckInterMinventory) a les éléments qui sont transmis dans la liste de liste.


Je mets le script de Builditem et une image, pour essayer d'illustrer ce qui est nécessaire.


Pouvez-vous éditer votre question afin qu'il a une meilleure description de ce que l'inventaire y a, ce que les objets sont comme, ainsi que ce qui est dans l'élémenttoslot.cost, ce que ces objets ressemblent


J'ai ajouté du code basé sur une hypothèse; avoir un aller à l'ajuster à votre application


J'ai essayé encore, mais je me suis coiffé. Je posterai le script d'inventaire et de machines à sous.


Je l'ai laissé tous les scripts, au cas où je l'avais aussi partis et j'ai quitté le script des articles, au cas où je ne définirai pas exactement un script pour chaque article, ils sont des copies du script lui-même et dans leurs préfabriçants, je change le Nom, id et autres.


J'ai pris et j'ai mis une image de la façon dont je crée un article et ses propriétés.


J'ai mis à jour la méthode CheckInventory (), j'ai utilisé sa logique et cela fonctionne maintenant partiellement, il compte les articles, mais il n'y a qu'un seul problème. En cas de construction de la pelle qu'il a besoin de 2 pierres et de bois, mais il mettait toutefois 2 bois et 1 pierre va également.


Ce code retour listcost.all (gp => invenoryitems.any (II => ii.id == gp.key && inventoryitems.count> gp.count ())); est "si le matériau Les correspondances et le nombre de l'inventaire total est supérieur au nombre de matériaux nécessaires ». Ce que vous voulez, c'est "si les correspondances matérielles et le nombre de matériaux sont supérieurs ou égaux" .. donc retour listcost.all (gp => invenoryitems.any (II => ii.id == gp.key && II.COUNT> = GP.Count ())); I-I. J'ai changé invenoryitems.count , à ii.count (et j'ai changé > à > = )


Succès, merci beaucoup pour votre aide, je ne sais pas comment remercier. Je n'ai besoin que de regrouper les éléments d'inventaire sur une variable, mais cela fonctionne parfaitement. MERCI BEAUCOUP. :) Code final var inventorysystems = bâtimentsvers.inventory.slot.Lowle (x => x.itemtoslot! = Null) .ectmany (x => x.itemtoslot.amounttem) .groupby (x => x.id);


Hé, désolé je n'ai pas répondu plus tôt, était absent du clavier enseigne une leçon. Heureux que vous l'iez triée! :)



0
votes

Vous pouvez mapper le listcost sur une liste de int , puis utilisez sauf () et tout () Pour vérifier si tous les éléments sont contenus: xxx


1 commentaires

Merci, merci à tous pour l'effort et le dévouement. Merci beaucoup. :)



0
votes

[mise à jour] forte>

Vous nous disez les suivants: P>

Comment convertir une requête en bool? J'ai utilisé le "Tout (x => x)" mais n'a pas donné la réponse dont j'avais besoin. P>

CheckInventory.where (x => listcost.contains (x.id)); code> p>

Dans ce cas, le listcost aurait 2 éléments, je devais vérifier si La Checkiteminventory a ces 2 éléments. P> blockQquote>

Si vous devez vérifier s'il y a un résultat, vous pouvez utiliser: p> xxx pré>

Si vous devez compter le résultat, vous pouvez utiliser P >

 checkItemInventory.Where(x => listCost.Contains(x.Id)).Count();


3 commentaires

Le nombre peut être optimisé pour tout si tout ce que vous vous souciez est Compte> 0


Désolé je n'ai pas compris. :(


Merci, merci à tous pour l'effort et le dévouement. Merci beaucoup. :)



0
votes

Vous pouvez utiliser un rejoindre code> pour créer une requête LINQ basée sur la méthode et utiliser les résultats pour vérifier si la longueur de la liste est supérieure à 0. puis tournez-la dans un booléen.

var query = checkItemInventory.Join(listCost,
                                    inventory => inventory.Id,
                                    cost => cost.Id,
                                    (inventory, cost) => new { id = inventory.Id });

var count = query.ToList().Count();
var b = (count > 0);


1 commentaires

Merci, merci à tous pour l'effort et le dévouement. Merci beaucoup. :)



0
votes

Si je l'obtiens correctement, listcost peut avoir moins d'éléments que CheckInventory . Vous souhaitez vérifier que tous les éléments de ListCost ont un élément correspondant en checkiteminventory. Corriger? Si oui, essayez ceci: xxx

Je ne connais pas le type de ces listes. Vous devrez peut-être utiliser x.id dans certains endroits


1 commentaires

ListCost serait la liste des éléments nécessaires au joueur pour créer l'élément et la checkInventVentrer serait la liste des éléments que le lecteur a. Dans ce cas, le script ListCost serait une fente avec l'élément de pelle, dans cet élément de pelle qu'elle aurait 2 objets attachés qui seraient une pierre et 1 bois. Si le joueur a ces 2 articles ou plus dans son inventaire, il peut le faire.