简体   繁体   English

如何快速获取NSMutableArray中另一个元素的一个元素的所有值

[英]How to get all the value of one element on the basis of other element in a swift NSMutableArray

I want to get all the doctor name where Department name is "Internal Medicine.\\n " from NSMutableArray in Swift language . 我想从NSMutableArraySwift语言获取部门名称为“ Internal Medicine。\\ n”的所有医生名称。

    (
 {
     DepartmentName = "Internal Medicine.\n ";
     DoctorName = "Dr. A. K. Kundu\n ";
 },
 {
     DepartmentName = "Internal Medicine.\n ";
     DoctorName = "Dr. Arvind K. Minz\n ";
 },
 {
     DepartmentName = "Internal Medicine.\n ";
     DoctorName = "Dr. Rajeev Choudhary\n ";
 },
 {
     DepartmentName = "Obstetrics And Gynaecology.\n ";
     DoctorName = "Dr. Gouri Jain\n ";
 },
 {
     DepartmentName = "Obstetrics And Gynaecology.\n ";
     DoctorName = "Dr. Poonam Kataria\n ";
 },
 {
     DepartmentName = "Obstetrics And Gynaecology.\n ";
     DoctorName = "Dr. Ila Jha\n ";
 },
 {
     DepartmentName = "Internal Medicine.\n ";
     DoctorName = "Dr. Ram Niwas Gupta\n ";
 },
 {
     DepartmentName = "Gasteroenterology.\n ";
     DoctorName = "Dr. Sanjay Kumar\n ";
 },
 {
     DepartmentName = "Neurology.\n ";
     DoctorName = "Dr. Sameer Gupta\n ";
 },
 {
     DepartmentName = "Physiotherapy And Rehabilitation.\n ";
     DoctorName = "Dr. Kapil Chauhan\n ";
 },
 {
     DepartmentName = "X­Ray.\n ";
     DoctorName = "Dr. Gagan Sharma\n ";
 }
)

I can easily get all the department and doctor name by using valueforkey (eg. posts.valueForKey("DoctorName") or posts.valueForKey ("Departmentname") ) and now I want to get all the doctor name where the department name is selected from department list 我可以通过使用valueforkey (例如posts.valueForKey(“ DoctorName”)或posts.valueForKey (“ Departmentname”))轻松获得所有部门名称和医生名称, 现在我想获取选择了部门名称的所有医生名称从部门清单

My complete code : 我完整的代码:

import UIKit
import ActionSheetPicker_3_0

class SearchController: UIViewController, NSXMLParserDelegate, UISearchBarDelegate , UITableViewDelegate , UITableViewDataSource {


    @IBOutlet weak var selectDepartmentView: UIButton!
    @IBOutlet weak var selectDoctorView: UIButton!

    var parser = NSXMLParser()
    var posts = NSMutableArray()
    var DoctorArray = NSMutableArray()
    var DepartmentArray = NSMutableArray()
    var DoctorArrayAsDepartment = NSMutableArray()
    var elements = NSMutableDictionary()
    var element = NSString()
    var nsArray = NSMutableString()
    var nsArray2 = NSMutableString()
    var PickValue=""
    //=======search bar============
    var searchActive : Bool = false
    var filtered:[String] = []
    //======search Bar===============
    var nonMutableArray:[String] = []

    @IBOutlet weak var searchBar: UISearchBar!

    @IBOutlet weak var tableView: UITableView!


    override func viewDidLoad() {
        super.viewDidLoad()

        // self.GetDeartmentsListParsing()
        self.GetDocotorListParsing()


        // Do any additional setup after loading the view.
        searchBar.delegate = self
        tableView.delegate = self
        tableView.dataSource = self

        tableView.tableFooterView = UIView(frame: CGRectZero)
    }


    func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
        searchActive = true;
    }

    func searchBarTextDidEndEditing(searchBar: UISearchBar) {
        searchActive = false;
    }

    func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        searchActive = false;
    }

    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchActive = false;
    }

    func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

        filtered = nonMutableArray.filter({ (text) -> Bool in
            let tmp: NSString = text
            let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
            return range.location != NSNotFound
        })
        if(filtered.count == 0){
            searchActive = false;
        } else {
            searchActive = true;
        }
        self.tableView.reloadData()
        println("searchText:" + searchText)
       // searchBar.text = filtered[indexPath.row]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if(searchActive) {
            return filtered.count
        }
        return nonMutableArray.count;
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell;
        if(searchActive){
            cell.textLabel?.text = filtered[indexPath.row]
        } else {
            cell.textLabel?.text = nil
           // nonMutableArray.removeAll()
        }

        return cell;
    }


    func GetDocotorListParsing()
    {
        posts = []
        parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://13.192.12.86:201/Api_interfaceTest.aspx?opname=something&PassKey=xyz")))
        parser.delegate = self
        parser.parse()

        println("into GetDoctorListParsing")
    }


    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
    {
        element = elementName
        if (elementName as NSString).isEqualToString("ReturnTable")
        {
            elements = NSMutableDictionary()
            elements = [:]

             nsArray = NSMutableString()
             nsArray = ""

             nsArray2 = NSMutableString()
             nsArray2 = ""
        }
    }

    func parser(parser: NSXMLParser!, foundCharacters string: String!)
    {

        if element.isEqualToString("Departmentname") {
            nsArray.appendString(string) // nsArray is NSMutableString
        }
       else if element.isEqualToString("PersonFullName") {
            nsArray2.appendString(string)

        }

    }

    func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!)
    {
        if (elementName as NSString).isEqualToString("Departmentname") {
            if !nsArray.isEqual(nil) {
                elements.setObject(nsArray, forKey: "DepartmentName")

            }
            if !nsArray2.isEqual(nil) {
                elements.setObject(nsArray2, forKey: "DoctorName")
            }
            posts.addObject(elements)
          // ===== This is the posts array i gave output above ===

            let myArrayDepartment = (posts.valueForKey("DepartmentName") as? [String])
            DepartmentArray = NSMutableArray(array: myArrayDepartment!)
            println(DepartmentArray)


            let myArrayDoctor = posts.valueForKey("DoctorName") as? [String]
            DoctorArray = NSMutableArray(array: myArrayDoctor!)
            println(DoctorArray)
            nonMutableArray = DoctorArray as AnyObject as [String]

        }
            }

    @IBAction func SelectDoctorButton(sender: AnyObject) {

                    // Inside a IBAction method:
                // Create an array of strings you want to show in the picker:
        searchActive = false;
        ActionSheetMultipleStringPicker.showPickerWithTitle("Select Department", rows: [
            DepartmentArray], initialSelection: [1], doneBlock: {
                picker, values, indexes in

                print("values = \(values)")
                print("indexes = \(indexes)")
                print("picker = \(picker)")

                var firstValue: AnyObject! = indexes[0]

                self.PickValue = firstValue as String

               self.selectDepartmentView.setTitle(firstValue as? String, forState: UIControlState.Normal)

                for var i=0 ; i<10 ; i++ {
                    let indexes = (self.posts.valueForKey("DepartmentName"))?.indexOfObject(self.PickValue)
                    // println("@@@@@sucess@@@@" +  index)
                    NSLog("\(indexes)")
                    //  find(posts.valueForKey("DepartmentName")),"")

                }

                return

            }, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)

        // You can also use self.view if you don't have a sender

    }

    @IBAction func SelectDoctor(sender: AnyObject) {

         tableView.reloadData()
         searchActive = false;

        ActionSheetMultipleStringPicker.showPickerWithTitle("Select Doctor", rows: [
            DoctorArray,

            ], initialSelection: [1, 1], doneBlock: {
                picker, values, indexes in

                print("values = \(values)")
                print("indexes = \(indexes)")
                print("picker = \(picker)")

                var firstValue: AnyObject! = indexes[0]

                self.PickValue = firstValue as String
                  self.selectDoctorView.setTitle(firstValue as? String, forState: UIControlState.Normal)
                return
            }, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)


    }

    // Build in Methode
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

        self.view.endEditing(true)

        }
}

I suggest you create a new Object named Doctor 我建议您创建一个名为Doctor的新对象

class Doctor: NSObject {

    var doctorName = ""
    var departmentName = ""
}

So that you can easily parse your data to new Doctor and store it like an array. 这样您就可以轻松地将数据解析为新的Doctor ,并将其存储为数组。 It will be easier to filter, find or do anything. 过滤,查找或执行任何操作将更加容易。

Hope this help. 希望能有所帮助。

I solved the problem by easy step : 我通过简单的步骤解决了这个问题:

Here department name and doctor name are on same index SO what i did is simply get indexOfObject() from DepartmentArrray and After that objectAtIndex() from DoctorArray. 在这里,部门名称和医生名称在同一索引上,所以我所做的只是从DepartmentArrray获得indexOfObject(),然后从DoctorArray获得objectAtIndex()。

Here is my code inside @IBAction func SelectDoctorButton(sender: AnyObject) : 这是我在@IBAction func SelectDoctorButton(sender:AnyObject)中的代码:

var indexOfObject = 0
            for var index = 0 ; index < self.DepartmentArray.count ; index++ {
                if self.PickValue == self.DepartmentArray[index] as NSString{
                    indexOfObject = index

                    println(" pickValue is at index : \(indexOfObject) ")
                    println(self.DoctorArray.objectAtIndex(index))


                    self.DoctorArrayAsDepartment.addObject(self.DoctorArray.objectAtIndex(index))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何获取Swift中NSMutableArray中元素的索引? - How do I get the index for an element in a NSMutableArray in Swift? 如何将对象/值添加到NSMutableArray上的某个元素? - How to add object / value to a certain element on NSMutableArray? 在 Swift 中加载其他元素后,在 TableViewCell 中异步加载一个元素 - Load One Element Asynchronously in TableViewCell after Other Element Loaded in Swift 如何删除数组swift 4中等于某个值的所有元素? - How to remove all the element which equal to certain value in an array swift 4? 将一个数组中的所有元素与另一数组进行比较 - Compare all element in one array with other array Swift-如何从值中获取Dictionary元素的索引? - Swift - How to get index of Dictionary element from value? iOS Swift如何在TableView中单击时获取元素的值 - IOS Swift how can I get the value of an element on Click in TableView 如何比较两个数组? 并获得不在另一个元素中的元素? - How to compare two arrays? And get the element which are not in the other one? 如何删除具有相同属性值但在NSMutableArray中具有相同属性值的所有对象 - How to remove all objects with the same property value but one in NSMutableArray 从NSMutableArray中的已解析数据中检索元素值 - Retrieve element value from parsed data in NSMutableArray
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM